将CvFindContours()更改为8连接的4个连接的邻居

时间:2011-08-05 04:33:43

标签: image-processing opencv contour

OpenCV cvFindContour()方法按照8连接邻居规则获取连接组件。有没有办法将其更改为4连接的邻居规则 - 检查连通性时不会考虑角单元格。

显然,Mathematica使用简单CornerNeighbors->False shown here on SO执行此操作。  在OpenCV中这样做的任何方式?即使我们要实际更改cv * .h文件中的函数定义(这是多毛的)......任何指针?

1 个答案:

答案 0 :(得分: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} };

但我没有测试过,我不知道这是否会避免'静态'和'常量'所以要小心;)