最終更新: mikk_ni3_92 2010年02月09日(火) 18:56:54履歴
現在地 >> メニュー >> OpenCV >> sequence編01 >> sequance編01::まとめ
#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; }