image-processing - 将CvFindContours()从8连接更改为4连接的邻居

OpenCV cvFindContour()方法遵循8个连接的邻居规则获取连接的组件。有什么方法可以将其更改为4个连通的邻居规则-检查连通性时将不考虑角单元。

显然,Mathematica使用简单的CornerNeighbors->False shown here on SO做到了这一点。
在OpenCV中可以这样做吗?即使我们实际上要更改cv * .h文件中的函数定义(这很麻烦),也可以使用任何指针吗?

最佳答案

恐怕这是不可能的,您可以考虑建议对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} };

但是我没有进行测试,我也不知道这是否可以避免“static”和“const”,所以要小心;)

https://stackoverflow.com/questions/6951483/

相关文章:

python - 来自Image的Python OpenCV cvCreateStructuring

opencv - 检测器->检测(img,关键点);错误

image-processing - 以下用于图像调整大小的 c++ 双三次插值代码有什么问题

docker - chown : changing ownership of '/var/lib/m

vb.net - 如何从VB.net轻松调用IronPython函数?

exception - openNI干扰cvCreateCameraCapture()

opencv - 段错误 OpenCV/Facedetect.c/CentOS 6 64Bit

docker - 与 WORKDIR 相关的映射卷

opencv - OpenCV-CirclesGridFinder的文档

python - 无法在 OpenCV2.1 上导入 cv