opencv中的轮廓比较

Posted

技术标签:

【中文标题】opencv中的轮廓比较【英文标题】:Contour comparison in opencv 【发布时间】:2015-12-01 20:39:52 【问题描述】:

我在 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】:

首先你应该定义什么是“其他”结果。

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

“轮廓”类型 fromcv::findContours 不超过vector<vector<cv::Point>,即。 e.它的输出中有不止一个轮廓。

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

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

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

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

【讨论】:

以上是关于opencv中的轮廓比较的主要内容,如果未能解决你的问题,请参考以下文章

opencv——轮廓发现与轮廓分析

OPENCV怎么能在比较复杂的图像中找到想要的物体的轮廓呢

OpenCV图像的轮廓的匹配

OpenCV中的图像处理 —— 轮廓入门+轮廓特征

opencv 怎样提取运动物体的轮廓?

[OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)