最終更新: mikk_ni3_92 2008年10月14日(火) 15:47:53履歴
現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::基本編09
INDEX: OpenCV::基本編08 << OpenCV::基本編09 >> OpenCV::基本編10
シーケンスを使うのに必要なものは、
手順は
メモリストレージの作成はcvCreateMemStorage()関数を使う。
シーケンスの作成とストレージの関連付けはcvCreateSeq()で行う。
[例]:int型のデータをシーケンスとして積む場合
CvSeq* cvCreateSeq( int seq_flags, int header_size, int elem_size, CvMemStorage* storage );
―第1引数―
シーケンスとなるデータがOpenCVではどのフラグなのかを指定する。
例えば、
―第2引数―
とりあえずsizeof (CvSeq)を指定する。(詳しくはリファレンス参照)
―第3引数―
sizeof(データ型)を指定。
―第4引数―
メモリストレージ(格納場所)を指定。
データの追加・削除には
データの取り出しには、
[例]:int型をシーケンスでつむ
サンプルコード >> OpenCV::基本編09まとめ
INDEX: OpenCV::基本編08 << OpenCV::基本編09 >> OpenCV::基本編10
シーケンスを使うのに必要なものは、
- メモリストレージ(データの格納場所)
- シーケンス
手順は
- メモリストレージを作成して
- シーケンスを作成して、メモリストレージと関連づける
- シーケンスにデータを積む
メモリストレージの作成はcvCreateMemStorage()関数を使う。
CvMemStorage *storage; storage = cvCreateMemStorage(); //ストレージ作成
シーケンスの作成とストレージの関連付けはcvCreateSeq()で行う。
[例]:int型のデータをシーケンスとして積む場合
CvMemStorage *storage; storage = cvCreateMemStorage(); //ストレージ作成 CvSeq *data; data = cvCreateSeq (CV_SEQ_ELTYPE_INDEX , sizeof (CvSeq), sizeof (int), storage); //シーケンス作成
CvSeq* cvCreateSeq( int seq_flags, int header_size, int elem_size, CvMemStorage* storage );
―第1引数―
シーケンスとなるデータがOpenCVではどのフラグなのかを指定する。
例えば、
- int型:CV_32SC1(→ マクロとして「CV_SEQ_ELTYPE_INDEX」がある)
- CvPoint型:CV_32SC2(→ マクロとして「CV_SEQ_ELTYPE_POINT」がある)
―第2引数―
とりあえずsizeof (CvSeq)を指定する。(詳しくはリファレンス参照)
―第3引数―
sizeof(データ型)を指定。
―第4引数―
メモリストレージ(格納場所)を指定。
データの追加・削除には
- cvSeqPush()関数
- cvSeqPop()関数
- ...etc
データの取り出しには、
- cvGetSeqElem()関数 →(CV_GET_SEQ_ELEMマクロがある)
- cvSeqElemIdx()関数
[例]:int型をシーケンスでつむ
CvMemStorage *storage; storage = cvCreateMemStorage(); //ストレージ作成 CvSeq *data; data = cvCreateSeq (CV_SEQ_ELTYPE_INDEX , sizeof (CvSeq), sizeof (int), storage); //シーケンス作成 int k1 = 9; int k2 = 3; int k3 = 6; cvSeqPush( data, &k1); //データを積む cvSeqPush( data, &k2); cvSeqPush( data, &k3);
std::cout << ( * CV_GET_SEQ_ELEM( int,data,1) ) << "\n"; //アドレスのさすものを指定 cvClearSeq(data); //メモリ解放 cvReleaseMemStorage( &storage );
サンプルコード >> OpenCV::基本編09まとめ