本文共 1431 字,大约阅读时间需要 4 分钟。
第一章: 模版匹配
文章目录
一.模版匹配是什么?
二.使用步骤
1 ,引入库
2,读入数据
3,效果图展示
4,多个印花检测
模版匹配:模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效,是通过一张模板图片去另一张图中找到与模板相似部分的一种算法。一个模板是一张小图片,这个图片有一定的尺寸,有角度(一般是不旋转的矩形, 角度为0)。
1,引入库
代码如下:
import cv2import numpyter as np
2 ,读入数据
代码如下:
import cv2import numpy as np img = cv2.imread("yinhua2.png")#读取原图template = cv2.imread("yinhua.png")#读取模板 result = cv2.matchTemplate(img,template,0)#进行模板匹配 min_val,max_val,min_loc,max_loc = cv2.minMaxLoc(result)#查找最大最小值位置h,w = template.shape[:2]#获取模板的高和宽top_left = min_loc#查找最小值位置bottom_right = (top_left[0]+w , top_left[1]+h)#查找右下角位置 cv2.rectangle(img,top_left,bottom_right,255,2)#绘制匹配到的矩形 cv2.imshow("img",img)cv2.imshow("template",template)cv2.waitKey(0)cv2.destroyAllWindows()
代码如下:
import cv2import numpy as np img = cv2.imread("yinhua2.png")#读取原图template = cv2.imread("yinhua.png")#读取模板 result = cv2.matchTemplate(img,template,cv2.TM_SQDIFF_NORMED)#进行模板匹配threshold = 0.01#定义阈值,因为TM_SQDIFF_NORMED越接近0越匹配,所以设置阈值为0.01 loc = np.where(result <= threshold)#匹配结果小于阈值的位置print(*loc[::-1]) for pt in zip(*loc[::-1]):#遍历位置,zip把两个列表依次参数打包 right_bottom = (pt[0] + w,pt[1] + h)#右下角位置 cv2.rectangle(img,pt,right_bottom, (0,0,255),2) cv2.imshow("img",img)cv2.imshow("template",template)cv2.waitKey(0)cv2.destroyAllWindows()
转载地址:http://lkusi.baihongyu.com/