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::matchShapes
将vector<cv::Point>
或cv::Mat
作为输入参数,即。 e.您只能使用此功能比较 2 个轮廓。
因此,您应该首先从cv::findConntours
输出中提取您感兴趣的轮廓(例如,超过 N 个点,或超过 X 个总长度),然后将每个轮廓与另一个轮廓进行比较。
如果您对比较下一个 cv::findContours
调用输出的轮廓感兴趣,您可以使用数组元素的任何匹配技术(例如,蛮力,即前一个数组的每个元素与当前数组的每个元素数组)。
可以在 OpenCV 文档中找到更多信息:3.0 version 或 2.4 version。
【讨论】:
以上是关于opencv中的轮廓比较的主要内容,如果未能解决你的问题,请参考以下文章