OpenCV cvFindContour()方法按照8连接邻居规则获取连接组件。有没有办法将其更改为4连接的邻居规则 - 检查连通性时不会考虑角单元格。
显然,Mathematica使用简单CornerNeighbors->False
shown here on SO执行此操作。
在OpenCV中这样做的任何方式?即使我们要实际更改cv * .h文件中的函数定义(这是多毛的)......任何指针?
答案 0 :(得分:1)
我担心这是不可能的,你可以考虑建议对opencv进行代码更改,添加一个允许这个的标志。目前在此文件中:
有一个名为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} };
但我没有测试过,我不知道这是否会避免'静态'和'常量'所以要小心;)