opencv 2.4.0で問題が発生すると、findContours関数が常にクラッシュします。残念ながら、問題を特定することは非常に困難でした。誰かが同様の問題に遭遇したことを願っています。
Microsoft K4W SDK 1.5を使用してKinectセンサーから深度ストリームをキャプチャし、それをOpenCV Matにコピーしてから、cvtColorとthresholdを介して8UC1画像に変換しています。findNonZeroを実行して、画像が空白でないことを確認してから、findContoursに渡します。しかし、最も単純なfindcountours実装でさえクラッシュします。
これが私の基本的なコードです:
rawdepth = Mat(Size(640,480),CV_8UC4);
thresh = Mat::zeros(640,480,CV_8UC1);
// storage for contours
vector<vector<Point>> contours;
cvtColor(rawdepth,thresh,CV_RGB2GRAY);
threshold(thresh,thresh,0,255,THRESH_BINARY);
if(countNonZero(thresh) > 100 ) {
// This crashes
findContours(thresh,contours,RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
}
findcontoursに渡される実際のマットがシングルチャンネル画像であり、空白ではないことを確認しました(つまり、500以上のポイントがあります)。しかし、findcontoursが実際に入力マットを変更できると聞いたので、これがヒープまたはスレッドに関連する問題であるかどうか疑問に思っていますか?
この時点で、リリースされたばかりのOpenCV 2.4.1を試して使用しますが、この問題の修正を示す修正済みのバグはありません。
どんなアイデアでも大歓迎です...