動的構造体

CvMemStorage

class CvMemStorage

動的に拡張可能なメモリストレージ.

OpenCV の多くの関数が,結果を出力するために与えられたストレージや,作業用のストレージを利用しています. そして,これらのストレージ領域は, CreateMemStorage によって作成されます. OpenCV Python は,CvMemStorage を占有するオブジェクトを監視し,それを参照するオブジェクトがなくなった時点で CvMemStorage を自動的に解放します このため, CvMemStorage を解放するための明示的な関数が存在しません.

>>> import cv
>>> image = cv.LoadImageM("building.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> seq = cv.FindContours(image, cv.CreateMemStorage(), cv.CV_RETR_TREE, cv.CV_CHAIN_APPROX_SIMPLE)
>>> del seq   # 関連するストレージも解放されます

CvSeq

class CvSeq

動的に拡張可能なシーケンス.

OpenCV の多くの関数が CvSeq オブジェクトを返します. CvSeq オブジェクトはシーケンスであり,以下は全て正しい書き方です:

seq = cv.FindContours(scribble, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)
# seq は,点のペアのシーケンス
print len(seq)
# FindContours が返した (x,y) 点のシーケンスを表示する:
for (x,y) in seq:
   print (x,y)
print seq[10]            # シーケンスの11番目の要素
print seq[::-1]          # 逆向きのシーケンス
print sorted(list(seq))  # ソートされたシーケンス

また,CvSeq オブジェクトは以下のメソッドを持ちます

h_next() , h_prev() , v_next() ,

v_prev() . これらのメソッドで連結された複数の CvSeq オブジェクトを返すことができる OpenCV の関数(例えば, FindContours )も存在します.

この場合,これらのメソッドは,その別のシーケンスを返します.関連するシーケンスが存在しない場合は,これらのメソッドは None を返します.

CvSet

class CvSet

ノードの集合.

CvSet オブジェクトを返す OpenCV 関数も存在します.この CvSet は,反復可能なオブジェクトです.例えば:

for i in s:
  print i
print set(s)
print list(s)

cv::CloneSeq

CloneSeq(seq, storage) → None

シーケンスのコピーを作成します.

パラメタ:
  • seq (CvSeq) – シーケンス
  • storage (CvMemStorage) – 新しいシーケンスヘッダと(もしあれば)コピーされたデータを保存する出力ストレージブロック.これが NULL の場合,入力シーケンスが存在するストレージブロックを使用します

この関数は,入力シーケンスの完全なコピーを作成し,そのポインタを返します.

cv::CreateMemStorage

CreateMemStorage(blockSize = 0) → memstorage

メモリストレージを作成します.

Parameter:blockSize – バイト単位で表されたストレージブロックサイズ.この値が 0 の場合,デフォルト値(現在は,約64K)が利用されます

この関数は,空のメモリストレージオブジェクトを作成します.

cv::SeqInvert

SeqInvert(seq) → None

シーケンス要素の順序を反転させます.

Parameter:seq (CvSeq) – シーケンス

この関数は,入力シーケンスの要素の順序を(先頭の要素は末尾に,末尾の要素は先頭へ,という風に)反転させます.

cv::SeqRemove

SeqRemove(seq, index) → None

シーケンスの中から要素を削除します.

パラメタ:
  • seq (CvSeq) – シーケンス
  • index (int) – 削除される要素

この関数は,指定のインデックス位置にある要素を削除します.インデックスが範囲外の場合はエラーになります.また,空のシーケンスから要素を削除しようとする事も,範囲外アクセスの特殊ケースです.この関数は,指定位置に近い側のシーケンスの端と index 番目(これは含まない)の要素の間に存在するシーケンス要素をシフトする事によって,要素を削除します.

cv::SeqRemoveSlice

SeqRemoveSlice(seq, slice) → None

シーケンススライスを削除します.

パラメタ:
  • seq (CvSeq) – シーケンス
  • slice (CvSlice) – 削除されるスライス

この関数は,シーケンスからシーケンススライスを削除します.

目次

このページ