形状匹配
函数
cv2.matchShape() 可以帮我们比较两个形状或轮廓的相似度。如 果返回值越小,匹配越好。它是根据
Hu 矩来计算的。文档中对不同的方法都 有解释。
我们试着将下面的图形进行比较:

import cv2
import numpy as np
img1 = cv2.imread('star.jpg',0)
img2 = cv2.imread('star2.jpg',0)
ret, thresh = cv2.threshold(img1, 127, 255,0)
ret, thresh2 = cv2.threshold(img2, 127, 255,0)
contours,hierarchy = cv2.findContours(thresh,2,1)
cnt1 = contours[0]
contours,hierarchy = cv2.findContours(thresh2,2,1)
cnt2 = contours[0]
ret = cv2.matchShapes(cnt1,cnt2,1,0.0)
print ret
得到的结果是:
• A
与自己匹配
0.0
• A
与
B
匹配
0.001946
• A
与
C
匹配
0.326911
看见了吗,及时发生了旋转对匹配的结果影响也不是非常大。
注意
:
Hu 矩是归一化中心矩的线性组合,之所以这样做是为了能够获取代表 图像的某个特征的矩函数,这些矩函数对某些变化如缩放,旋转,镜像映射(除 了
h1
)具有不变形。