前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >形状匹配

形状匹配

作者头像
裴来凡
发布2022-05-28 16:18:51
1.1K0
发布2022-05-28 16:18:51
举报
文章被收录于专栏:图像处理与模式识别研究所
代码语言:javascript
复制
import cv2
o1=cv2.imread('C:/Users/xpp/Desktop/coins_1.png')#原始图像
o2=cv2.imread('C:/Users/xpp/Desktop/coins_2.png')#原始图像
o3=cv2.imread('C:/Users/xpp/Desktop/coins_3.png')#原始图像
gray1=cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片
gray2=cv2.cvtColor(o2,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片
gray3=cv2.cvtColor(o3,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图片
ret,binary1=cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片
ret,binary2=cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片
ret,binary3=cv2.threshold(gray3,127,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片
contours1,hierarchy=cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓
contours2,hierarchy=cv2.findContours(binary2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓
contours3,hierarchy=cv2.findContours(binary3,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)#计算图像轮廓
cnt1=contours1[0]
cnt2=contours2[0]
cnt3=contours3[0]
ret0=cv2.matchShapes(cnt1,cnt1,1,0.0)
ret1=cv2.matchShapes(cnt1,cnt2,1,0.0)
ret2=cv2.matchShapes(cnt1,cnt3,1,0.0)
print("相同图像的matchShape=",ret0)
print("相似图像的matchShape=",ret1)
print("不相似图像的matchShape=",ret2)
cv2.imshow("original1",o1)
cv2.imshow("original2",o2)
cv2.imshow("original3",o3)
cv2.waitKey()
cv2.destroyAllWindows()

相同图像的matchShape= 0.0 相似图像的matchShape= 0.19863853606386983 不相似图像的matchShape= 0.11567279132076783

算法:形状匹配是通过Hu矩来判断两张图像的一致性。同一幅图像的Hu矩相同,Hu矩差值为0。在图像旋转、缩放、平移等操作后,Hu矩差值不大。

对于图像A,图像B:

retval=cv2.matchShapes(contour1, contour2, method, parameter)

  • contour1表示第1个轮廓或灰度图像
  • contour2表示第2个轮廓或灰度图像
  • method表示比较两个图像的Hu矩的方法
  • parameter表示应用于method的特定参数
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档