0

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

谢谢你

4

1 回答 1

3

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

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

"contours" 类型 fromcv::findContours不超过vector<vector<cv::Point>,即在其输出中有多个轮廓。

cv::matchShapes采用vector<cv::Point>orcv::Mat作为输入参数,即您只能使用此函数比较 2 个轮廓。

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

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

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

于 2015-12-01T23:44:43.080 回答