我在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个对象。
谢谢
答案 0 :(得分:3)
首先,您应该定义“其他”结果的含义。
其次,可能最好使用cv::matchShapes
(C ++接口)而不是cvMatchShapes
(C接口) - 类型兼容性/转换的问题会更少。
cv::findContours
的“轮廓”类型不超过vector<vector<cv::Point>
,i。即输出中有多个轮廓。
cv::matchShapes
将vector<cv::Point>
或cv::Mat
作为输入参数,i。即你只能用这个函数比较2个轮廓。
因此,您应首先从cv::findConntours
输出中提取您感兴趣的轮廓(例如,具有多于N个点或具有超过X总长度的轮廓),然后将每个轮廓与另一个轮廓进行比较。
如果您对下一个cv::findContours
调用输出的轮廓比较感兴趣,可以使用任何匹配的数组元素技术(例如,暴力,即每个元素的前一个数组的每个元素)当前数组)。
可以在OpenCV文档中找到更多信息:3.0 version或2.4 version。