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