OpenGL de プログラミング - OpenCV::基本編09
現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::基本編09
INDEXOpenCV::基本編08 << OpenCV::基本編09 >> OpenCV::基本編10

シーケンス


シーケンスとは、様々なデータ(int,CvPointなど)をメモリ上に蓄積していくものである。
(OpenCVの関数には、シーケンスを引数とするものもある)

基本的な使い方


シーケンスを使うのに必要なものは、
  • メモリストレージ(データの格納場所)
  • シーケンス
である。

手順は
  1. メモリストレージを作成して
  2. シーケンスを作成して、メモリストレージと関連づける
  3. シーケンスにデータを積む
となる。

[1]:メモリストレージを作成


メモリストレージの作成はcvCreateMemStorage()関数を使う。


	CvMemStorage *storage;
	storage = cvCreateMemStorage();  //ストレージ作成


[2]:シーケンスの作成、ストレージとの関連づけ


シーケンスの作成とストレージの関連付けは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引数―
メモリストレージ(格納場所)を指定。



データ操作


データの追加・削除には
などいくつかある。

データの取り出しには、 がある


[例]: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まとめ