opencv中的轮廓比较

Contour comparison in opencv

我已经在 opencv/c++ 中创建了一些代码 可以找到图像的轮廓(叶子) 所以在从方法

得到轮廓结果后

findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

此方法的结果将保存在 "contours" 类型 (OutputArrayofArrays)

所以问题是如何将这些结果与其他结果进行比较?

我发现这个方法可以比较,但我不会用!

double compare = cvMatchShapes(R, T, CV_CONTOURS_MATCH_I1);

R,T: 2 个对象进行比较。

谢谢

首先你应该定义"other"结果是什么意思。

其次,可能最好使用 cv::matchShapes(C++ 接口)而不是 cvMatchShapes(C 接口)- 类型 compatibility/conversion.[=20= 的问题会更少]

"contours"类型从cv::findContours不超过vector<vector<cv::Point>, i. e.它的输出中有不止一个轮廓。

cv::matchShapesvector<cv::Point>cv::Mat 作为输入参数,i. e.您只能使用此功能比较 2 个轮廓。

因此你应该首先从cv::findConntours输出中提取你感兴趣的轮廓(例如,超过N个点,或超过X总长度),然后将每个轮廓与其他轮廓进行比较一.

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

可以在 OpenCV 文档中找到更多信息:3.0 version or 2.4 version