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::matchShapes
以 vector<cv::Point>
或 cv::Mat
作为输入参数,i. e.您只能使用此功能比较 2 个轮廓。
因此你应该首先从cv::findConntours
输出中提取你感兴趣的轮廓(例如,超过N个点,或超过X总长度),然后将每个轮廓与其他轮廓进行比较一.
如果您对比较下一个 cv::findContours
调用输出的轮廓感兴趣,您可以使用数组元素的任何匹配技术(例如,蛮力,即上一个数组的每个元素与当前数组的每个元素)。
可以在 OpenCV 文档中找到更多信息:3.0 version or 2.4 version。
我已经在 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::matchShapes
以 vector<cv::Point>
或 cv::Mat
作为输入参数,i. e.您只能使用此功能比较 2 个轮廓。
因此你应该首先从cv::findConntours
输出中提取你感兴趣的轮廓(例如,超过N个点,或超过X总长度),然后将每个轮廓与其他轮廓进行比较一.
如果您对比较下一个 cv::findContours
调用输出的轮廓感兴趣,您可以使用数组元素的任何匹配技术(例如,蛮力,即上一个数组的每个元素与当前数组的每个元素)。
可以在 OpenCV 文档中找到更多信息:3.0 version or 2.4 version。