0

OpenCV cvFindContour()メソッドは、8連結近傍規則に従って連結成分を取得します。これを4接続の隣接ルールに変更する方法はありますか?接続性をチェックするときにコーナーセルは考慮されません。

どうやらMathematicaはCornerNeighbors->False SOでここに示されている単純なものでこれを行っているようです。OpenCVでこれを行う方法はありますか?cv * .hファイル(かなり毛深い)の関数定義を実際に変更したとしても...ポインタはありますか?

4

1 に答える 1

1

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

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

すべての隣接を決定するicvCodeDeltasと呼ばれる配列があります。使用場所を確認して、

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

これは、たとえばCV_NEIGHBOURS_CROSSが指定されている場合に使用されます。次に、opencv-communityに追加を依頼します。これは、オープンソースの仕組みです。たぶん、迅速で汚い、恥ずべき修正は次のようになります。

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

しかし、私はそれをテストしませんでした、そしてこれが「静的」と「定数」を回避するかどうかわかりませんので注意してください;)

于 2012-05-28T16:10:10.270 に答える