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



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

显然Mathematica用一个简单的CornerNeighbors->False来做这个。有什么办法在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_neighbor_cross时使用。然后要求openv社区添加它,这是开源的工作方式。也许一个快速,肮脏,你应该感到羞耻的修复方法是这样的:

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

但是我没有测试,我不知道这是否会避免'static'和'const',所以要小心;)

相关内容

  • 没有找到相关文章

最新更新