2011-08-05 11 views
0

OpenCV cvFindContour()メソッドは、8接続ネイバルールに従って接続コンポーネントを取得します。それを4接続ネイバールールに変更する方法はありますか?連結性をチェックするときにコーナーセルは考慮されません。CvFindContours()を8接続された4接続ネイバに変更する

明らかにMathematicaはこれを単純な0​​shown here on SOで実行します。 OpenCVでこれを行う方法はありますか?実際にcv * .hファイル(これはやや毛深い)の関数定義を変更したとしても...ポインタは何ですか?

答えて

1

これは不可能ですが、opencvのコード変更を提案し、これを可能にするフラグを追加することを検討することができます。現在、このファイルに:

http://code.opencv.org/projects/opencv/repository/entry/trunk/opencv/modules/imgproc/src/contours.cpp

すべてのネイバーを決定icvCodeDeltasという配列があります。あなたはそれが使用される場合にチェックして、例えばCV_NEIGHBOURS_CROSSが指定されているときに使用される

static const CvPoint icvCodeDeltas4[4] = { {1, 0}, {0, -1}, {-1, 0}, {0, 1} }; 

を追加することができます。 opencv-communityに、オープンソースが動作する方法を追加するように依頼してください。たぶん、迅速な、汚い、あなたは-あるべき-恥じ修正はこのようなものになるだろう:

virtual CvPoint icvCodeDeltas[8]; 
icvCodeDeltas = { {1, 0}, {0, -1}, {-1, 0}, {0, 1}, {1, 0}, {0, -1}, {-1, 0}, {0, 1} }; 

しかし、これは「静的」と「constのを避けることができます場合、私はそれをテストしていない、と私は見当がつかない'なので注意してください;)

関連する問題