OpenCV 的 cvFindContour() 方法按照 8 连通邻居规则获取连通分量。有什么方法可以将其更改为 4-connected 邻居规则 - 检查连通性时不会考虑角落单元格。
显然,Mathematica 使用CornerNeighbors->False
SO 上显示的简单方法来做到这一点。在 OpenCV 中有什么方法可以做到这一点?即使我们要实际更改 cv*.h 文件中的函数定义(这是相当多毛的)......任何指针?
OpenCV 的 cvFindContour() 方法按照 8 连通邻居规则获取连通分量。有什么方法可以将其更改为 4-connected 邻居规则 - 检查连通性时不会考虑角落单元格。
显然,Mathematica 使用CornerNeighbors->False
SO 上显示的简单方法来做到这一点。在 OpenCV 中有什么方法可以做到这一点?即使我们要实际更改 cv*.h 文件中的函数定义(这是相当多毛的)......任何指针?
恐怕这是不可能的,您可以考虑建议对 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} };
但我没有对此进行测试,我不知道这是否会避免“静态”和“常量”,所以要小心;)