現在地 >> メニュー >> OpenCV >> sequence編01 >> sequance編01::まとめ

問題

「50000個」の「int型」のデータをシーケンスに追加しその一部を出力せよ。
その時にメモリストレージの「bottom」と「top」の位置を出力し、位置がどうなっているかを確認せよ。

答え

#include <iostream>
#include <cv.h>
#include <highgui.h>

#pragma comment(lib,"cv200.lib")
#pragma comment(lib,"cxcore200.lib")
#pragma comment(lib,"highgui200.lib")

//--------- 各種外部変数 ----------//
const int ElementNum = 50000;

//--------- メイン関数 -----------//
int main( int argc, char **argv)
{
	
	CvMemStorage *storage;
	storage = cvCreateMemStorage(); //デフォルトは1つあたり64kBのブロックサイズ
	
	CvSeq *sequance;
	sequance = cvCreateSeq (CV_SEQ_ELTYPE_INDEX , sizeof (CvSeq), sizeof (int), storage); //シーケンス作成
	//CV32FC1 == CV_SEQ_ELTYPE_INDEX → 32bit1チャネル→int型のデータ


	
	std::cout <<"Total Seq is "<< sequance->total << "\n";
	int *a = new int[ElementNum];
	
	std::cout << "( bottom, top )  = ( " <<storage->bottom << ", " <<storage->top<<")\n";
	
	//データの追加
	for(int loop = 0;loop < ElementNum;++loop)
	{
		a[loop] = loop;
		cvSeqPush( sequance, &a[loop]); //データプッシュ
	}
	std::cout <<"Push..... Now Total Seq is  "<< sequance->total << "\n\n";
	
	//データの出力
	int *num;
	for( int i=sequance->total-100; i<sequance->total; ++i ) 
	{
		num = (int*)cvGetSeqElem ( sequance, i );
		printf("%d\n",*num);
	}

	std::cout << "cvClearSeq...\n";
	cvClearSeq(sequance);//シーケンスの再利用可能だが、もうメモリとしては破棄
	std::cout <<"Now Total Seq is  "<< sequance->total << "\n\n";
	
	//for( int i=0; i<50; ++i ) 
	//{
	//	num = (int*)cvGetSeqElem ( sequance, i );//使用予約だけのためアクセスエラー!!
	//	printf("%d\n",*num);
	//}

	std::cout << "( bottom, top )  = ( " <<storage->bottom << ", " <<storage->top<<")\n";
	cvClearMemStorage(storage);//ストレージクリア

	std::cout << "cvClearMemStorage....\n";
	std::cout << "( bottom, top )  = ( " <<storage->bottom << ", " <<storage->top<<")\n";//元に戻るはず

	//メモリストレージ開放
	cvReleaseMemStorage( &storage ); //いわゆるcvReleaseImageなどと同じ

	delete [] a;

	return 0;
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます