0

OpenCV 的 cvFindContour() 方法按照 8 连通邻居规则获取连通分量。有什么方法可以将其更改为 4-connected 邻居规则 - 检查连通性时不会考虑角落单元格。

显然,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 回答