我在opencv / c++中创建了一些代码,巫婆可以找到图像的轮廓(叶)
所以从方法获得轮廓结果之后
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
此方法的结果将保存为“轮廓”类型(OutputArrayofArrays)

所以问题是如何将这些结果与另一个进行比较?

我发现这种方法可以比较,但我不能使用它!
double compare = cvMatchShapes(R, T, CV_CONTOURS_MATCH_I1);
R,T:2个要比较的对象。

谢谢

最佳答案

首先,您应该定义什么是“其他”结果。

其次,可能最好使用cv::matchShapes(C++接口(interface))而不是cvMatchShapes(C接口(interface))-类型兼容性/转换的问题更少。

来自cv::findContours的“轮廓”类型不超过vector<vector<cv::Point>,即。 e。其输出中有多个轮廓。
cv::matchShapesvector<cv::Point>cv::Mat作为输入参数,即i。 e。使用此功能只能比较两个轮廓。

因此,您应该首先从cv::findConntours输出中提取您感兴趣的轮廓(例如,具有N个以上的点,或总长度大于X的轮廓),然后将每个轮廓与另一个轮廓进行比较。

如果您有兴趣比较下一个cv::findContours调用输出中的轮廓,则可以使用任何与数组元素匹配的技术(例如,蛮力,即前一个数组的每个元素与当前数组的每个元素)来进行此操作。

可以在OpenCV文档中找到更多信息:3.0 version2.4 version

10-06 05:14
查看更多