我在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::matchShapes
将vector<cv::Point>
或cv::Mat
作为输入参数,即i。 e。使用此功能只能比较两个轮廓。
因此,您应该首先从cv::findConntours
输出中提取您感兴趣的轮廓(例如,具有N个以上的点,或总长度大于X的轮廓),然后将每个轮廓与另一个轮廓进行比较。
如果您有兴趣比较下一个cv::findContours
调用输出中的轮廓,则可以使用任何与数组元素匹配的技术(例如,蛮力,即前一个数组的每个元素与当前数组的每个元素)来进行此操作。
可以在OpenCV文档中找到更多信息:3.0 version或2.4 version。