美文网首页
形状匹配

形状匹配

作者: 大龙10 | 来源:发表于2023-10-14 12:31 被阅读0次

书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857


一、形状匹配

  • 形状匹配用来计算两个对象的形状间的匹配值,
    通常情况下,两个对象越相似,其形状匹配值越小。

  • OpenCV提供了函数cv2.matchShapes()用来对两个对象的Hu矩进行比较。
    这两个对象可以是轮廓,也可以是灰度图像。

二、语法格式

  • 函数cv2.matchShapes()的语法格式为
    retval=cv2.matchShapes(contour1, contour2,method, parameter)
    其中,retval是返回值。该函数有如下4个参数。
    ● contour1:第1个轮廓或者灰度图像。
    ● contour2:第2个轮廓或者灰度图像。
    ● method:比较两个对象的Hu矩的方法,具体如表8-1所示。
    表8-1 method的值及其具体含义
    在表8-1中,A表示对象1,B表示对象2,其中:

    其中:h^A_ih^B_i分别是对象A和对象B的Hu矩。
    ● parameter:应用于method的特定参数,该参数为扩展参数,因此将该值设置为0。

三、匹配度计算

  • 使用函数cv2.matchShapes()计算3幅不同图像的匹配度。

import cv2

# --------------读取并绘制原始图像------------------
o1 =  cv2.imread('d:\\c1.jpg')  
o2 =  cv2.imread('d:\\c2.jpg')  
o3 =  cv2.imread('d:\\cc.jpg')  

# --------------提取轮廓------------------
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("o1.shape=",o1.shape)
print("o2.shape=",o2.shape)
print("o3.shape=",o3.shape)
print("相似图像(cnt1,cnt1)的matchShape=",ret0)
print("相似图像(cnt1,cnt2)的matchShape=",ret1)
print("不相似图像(cnt1,cnt3)的matchShape=",ret2)

cv2.imshow('o1',o1)
cv2.imshow('o2',o2)
cv2.imshow('o3',o3)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果
输出数据

四、结果分析

  • 同一幅图像的Hu矩是不变的,二者差值为0。
    例如,图像o1中的对象(手)和自身距离计算的结果为0。
  • 对原始图像与对原始图像进行平移、旋转和缩放后得到的图像应用函数cv2.matchShapes()后,得到的返回值较小。
    例如,图像o2中的对象是通过对图像o1中的对象进行缩放、旋转和平移得到的,对二者应用函数cv2.matchShapes()后,返回值较小,约为0.08。
  • 不相似图像经函数cv2.matchShapes()计算后得到的返回值较大。
    例如,图像o1中的对象和图像o3中的对象的差别较大,对二者应用cv2.matchShapes()函数后,返回值较大,约为0.83。

【注意】除使用形状匹配外,还可以通过Hu矩来判断两个对象的一致性。但是Hu矩不如函数cv2.matchShapes()直观。

相关文章

  • 形状匹配

    基本概念 图像的形状可以看成是图像的轮廓。图像形状的表示方式有:链码、游程码、freeman码等,还有简化方式:B...

  • 形状匹配

    机器视觉原理与案例详解工控帮教研组编著电子工业出版社2020.7ISBN 978-7-121-39084-5 一、...

  • Halcon模板匹配之形状匹配

    一、匹配流程 就是:创建模板和匹配模板,其中: 创建模板: 通过BLOB分析处理图像创建ROI,或读取ROI拿到模...

  • 2020-02-20 AE

    01.Ctrl+Alt+F素材匹配合成大小 02.双击形状工具,生成的形状大小匹配合成 03.预览分辨率,Ctrl...

  • 图像轮廓之形状匹配

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第1...

  • 基于HALCON的视频对象分割及跟踪方法总结

    前面总结了利用HALCON进行模板匹配的一些方法,讨论了利用物体形状的轮廓进行匹配的步骤和如何来优化匹配的速度,提...

  • halcon模板匹配总结

    halcon的模板匹配可以归为三类:1、基于灰度:灰度,互相关ncc2、基于形状:形状,组件3、基于描述符:描述匹...

  • 2018-09-10

    5、平面拼图。父母可以在纸上画出各类形状,引导孩子进行形状匹配,如果结合磁力墙膜引导,那就更赞了。 6、立体几何搭...

  • LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)

    1、原理 彩色模式匹配(Color Pattern Matching)基于目标图像的色彩和空间分布特征(如形状、尺...

  • day24.娅萌.关于转场

    一,特级转场——剪辑软件不只是剪辑这么简单 1.匹配剪辑:上下镜头具有相同或者相似的主题形象。或者其中物体形状相近...

网友评论

      本文标题:形状匹配

      本文链接:https://www.haomeiwen.com/subject/aulabdtx.html