【问题标题】:How to compare two contours translated from one another's position?如何比较从彼此位置平移的两个轮廓?
【发布时间】:2014-02-19 13:47:38
【问题描述】:
图片:http://answers.opencv.org/upfiles/1392627645523812.jpg
大家好,
我想比较两个轮廓并找到它们之间的hausdorff距离以找到两个轮廓之间的相似性。当我将右侧的模板轮廓作为参考模板轮廓以从左侧找到相似的轮廓时,我遇到了错误,因为场景轮廓点是从模板轮廓点转换而来的。实际上,我是直接从两张图像中获取轮廓点。如您所见,我不能只裁剪轮廓区域,因为它会影响相邻的轮廓。
我应该制作一个具有场景图像大小的空图像,并让我的模板轮廓在场景图像上滑动以找到匹配项吗?或者还有其他更好的方法吗?
问候,
巴拉吉.R
【问题讨论】:
标签:
opencv
image-processing
【解决方案1】:
您可以执行以下操作:
- 检测原始图像中的轮廓。
- 获取每个轮廓的轮廓序列/点。例如,假设第一个起点在轮廓 1 中存储为点 1、点 2、点 3 等(只是一个粗略的例子)。
- 然后找到每个轮廓的最小和最大 x 和 y 坐标。
- 对于每个轮廓
width = max_x - min_x 和height = max_y - min_y
-
然后为每个轮廓创建单独的图像
regionOfInterest = Rect(min_x, min_y, width, height)
templateImage = originalImage(regionOfInterest);
现在,执行 matchTemplate();在每个单独的模板图像(从每个轮廓创建)和原始图像之间,然后您可以找到最大坐标的位置。
- 如果您认为模板图片的比例也可以变化,那么您可以在模板图片上
pryUp() 或pryDown()。