2011-01-08 15 views
2

私はOpenCVを使って2つの画像の2つのブロブを比較しています。 類似している可能性が高いブロブのペアがあり、そのインデックスが輪郭配列(cvFindContours()によって生成された)内にあることがわかっているとすれば、どのようにして一定の時間内に1つの輪郭にアクセスできますか?OpenCV:コールcvFindContours()の後にO(1)の1つの輪郭にアクセスする方法?

最も厄介なのは、リンク操作(contours = contours-> h_next)を複数回使用することですが、配列内の1つの輪郭を高速に検索する方法があるのだろうかと思います。

私はcvFindContours()を呼び出す際にCV_RETR_EXTERNALとCV_CHAIN_APPROX_NONEを使用します。

ありがとうございます! -J.C.

答えて

2

機能はcvGetSeqElemだと思います。 OpenCV docsを引用する: "ブロックの数が要素の数よりはるかに少ないと仮定すると、関数は時間の複雑さがO(1)です。"この文脈では、「ブロック」は「輪郭」を意味すると考えています。

はまた、そのコピーメモリの一つの連続ブロックのシーケンスをcvCvtSeqToArraylink)を見て、取ります。

+0

コメントありがとうございます!私はcvGetSeqElemが私の望むものではないと思います:それはシーケンスから1つの要素を取得します - この場合輪郭上の点です。私はcvCvtSeqToArrayが仕事をすることができることに同意しますが、お気づきのように、このような輪郭(新規/削除、メモリコピーなど)を操作するのは厄介です。 – galactica