opencv中的轮廓比较

时间:2015-12-01 20:39:52

标签: c++ opencv comparison contour canny-operator

我在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个对象。

谢谢

1 个答案:

答案 0 :(得分:3)

首先,您应该定义“其他”结果的含义。

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

来自cv::findContours

“轮廓”类型不超过vector<vector<cv::Point>,i。即输出中有多个轮廓。

cv::matchShapesvector<cv::Point>cv::Mat作为输入参数,i。即你只能用这个函数比较2个轮廓。

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

如果您对下一个cv::findContours调用输出的轮廓比较感兴趣,可以使用任何匹配的数组元素技术(例如,暴力,即每个元素的前一个数组的每个元素)当前数组)。

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