Opencv 如何匹配两条撕裂的边?
我正试图重建一张撕破的纸。第一步是检测撕裂边缘: 接下来,旋转一条撕裂边并与另一条撕裂边进行比较: 当两个轮廓相互匹配时,文档将对齐。旋转一块,比较撕裂的边缘。名为Opencv 如何匹配两条撕裂的边?,opencv,contour,Opencv,Contour,我正试图重建一张撕破的纸。第一步是检测撕裂边缘: 接下来,旋转一条撕裂边并与另一条撕裂边进行比较: 当两个轮廓相互匹配时,文档将对齐。旋转一块,比较撕裂的边缘。名为match的分数描述了两个轮廓之间的匹配: tempA = draw_contour(tempA, b, 123, 3) tempB = draw_contour(tempB, a, 123, 3) tempC = tempA + tempB _, thresh = cv2.threshold(tempC, 220, 255, c
match
的分数描述了两个轮廓之间的匹配:
tempA = draw_contour(tempA, b, 123, 3)
tempB = draw_contour(tempB, a, 123, 3)
tempC = tempA + tempB
_, thresh = cv2.threshold(tempC, 220, 255, cv2.THRESH_BINARY_INV);
thresh = 255 - thresh
match = sum(sum(thresh))
这两个轮廓不太吻合:
这些轮廓非常吻合。在这里,文档是对齐的:
轮廓匹配的计算是基础。我在不同的图像上绘制轮廓。对图像求和并应用阈值。这计算两个轮廓重叠的像素数。这种方法效果很好,但在比较多条边时速度太慢,不实用
我如何计算撕裂边缘的两个轮廓的匹配程度?假设没有并发症(见我上面的评论),您可以尝试下面概述的步骤。请参见下图
- 计算连接边1端点的直线方程
- 计算连接边2端点的直线方程
- 计算这两条直线之间的角度
- 这为角度提供了两种可能性:
或alpha
180 alpha
- 找到两条直线段的中点并对齐(图中未显示。可能您已经在做一些事情来对齐曲线)
- 然后,尝试这两个角度,看看哪一个根据你的匹配成本提供最佳匹配