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

标签 image-processing opencv contour

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”,所以要小心;)

关于image-processing - 将CvFindContours()从8连接更改为4连接的邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951483/

相关文章:

opencv - 相机标定opencv

python - 如何使仿射变换矩阵成为透视变换矩阵?

opencv - 使用 Unity3D 解决 PnP

python - Matplotlib 挑战 - 改变等高线图中的线条样式

python - Python 中的图像锐化错误

python - 图像处理:实时FedEx Logo 检测器的算法改进

OpenCV - 在二值图像中找到最大 Blob 的边界框

image-processing - DirectX 和 OpenCV

python - Matplotlib 使用一组特定数据点绘制等高线图

c++ - 在 OpenCV 和 C++ 中查找距轮廓中心最近的黑色像素