python模板匹配_Python 模板匹配 匹配多个 识别多个图形

本文介绍了Python中使用OpenCV库进行图像处理,特别是模板匹配来识别多个图形的方法。通过选择小图的核心部分,利用TM_SQDIFF、TM_CCORR等匹配方式,结合阈值设定,可以有效地在大图中找到模板的匹配位置。
摘要由CSDN通过智能技术生成

识别技巧:

小图的选择,尽可能的选择最核心的部分,要保证大图里面每个元素有包含了小图

小图特点:小、每个图都能匹配到、取核心部分

匹配的几种方式:

1、TM_SQDIFF:平方差匹配;

TM_SQDIFF_NORMED:标准平方差匹配。

利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大。

2、TM_CCORR:相关性匹配;

TM_CCORR_NORMED:标准相关性匹配。

采用模板和图像间的乘法操作,数越大表示匹配程度较高, 0表示最坏的匹配效果。

3、TM_CCOEFF:相关性系数匹配;

TM_CCOEFF_NORMED:标准相关性系数匹配。

将模版对其均值的相对值与图像对其均值的相关值进行匹配,

1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列)。

总结:随着从简单的测量(平方差)到更复杂的测量(相关系数),我们可获得越来越准确的匹配(同时也意味着越来越大的计算代价)。

说明:

原图(大图):big.jpg

模板(小图):smart.jpg

importcv2importnumpy as npfrom matplotlib importpyplot as plt#原文:https://www.cnblogs.com/gezhuangzhuang/p/10724769.html#原文:https://blog.csdn.net/qq_21840201/article/details/85084621

#1. 读入原图和模板

img_rgb = cv2.imread('big.jpg')

img_gray=cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

template= cv2.imread('smart.jpg', 0)

h, w= template.shape[:2]#归一化平方差匹配

res =cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)

threshold= 0.8

#返回res中值大于0.8的所有坐标#返回坐标格式(col,row) 注意:是先col后row 一般是(row,col)!!!

loc = np.where(res >=threshold)#loc:标签/行号索引 常用作标签索引#iloc:行号索引#loc[::-1]:取从后向前(相反)的元素#*号表示可选参数

for pt in zip(*loc[::-1]):

right_bottom= (pt[0] + w, pt[1] +h)print(pt)

cv2.rectangle(img_rgb, pt, right_bottom, (0, 0,255), 2)#保存处理后的图片

cv2.imwrite('res.png', img_rgb)#显示图片 参数:(窗口标识字符串,imread读入的图像)

cv2.imshow("test_image", img_rgb)#窗口等待任意键盘按键输入 0为一直等待 其他数字为毫秒数

cv2.waitKey(0)#销毁窗口 退出程序

cv2.destroyAllWindows()

用到的图片:

big.jpg

smart.jpg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值