opencv-模板匹配

模板在原图像上从原点开始滑动,通过计算与原图像的像素点的数据差值来作为结果输出。原图A×B,模板a×b,则输出矩阵为(A-a+1)×(B-b+1) 

单对象模板匹配

cv2.imread()函数完成图像读取

cv2.imread(imgpath,flags)

  • imgpath:图片路径
  • flags:读入标识符,有三种类型
cv2.IMREAD_COLOR1默认,读入一副彩色图片不包括alpha通道或写为1
cv2.IMREAD_GRAYSCALE0读入灰度图片或写为0
cv2.IMREAD_UNCHANGED-1读入完整图片包括alpha通道或写为-1

flags

cv2.minMaxLoc()函数在数组中找到全局最小和最大值

minVal, maxVal,minLoc,maxLoc =minMaxLoc(src)

  • minVal:最小值
  • maxVal:最大值
  • minVal:最小值坐标位置
  • maxVal:最大值坐标位置

cv2.matchTemplate()函数完成模板匹配

cv2.matchTemplate(img,template,flags)

  • img:输入图像
  • template:模板图像
  • flags:差别程度的六个计算方法 
cv2.TM_SQDIFF计算平方不同,计算出来的值越小越相关
cv2.TM_CCORR计算相关性,计算出来的值越大越相关
cv2.TM_CCOEFF计算相关系数,计算的值越大越相关
cv2.TM_SQDIFF_NORMED计算平方不同并归一化,计算的值越小越相关
cv2.TM_CCORR_NORMED计算相关性并归一化,计算的值越大越相关
cv2.TM_CCOEFF_NORMED计算相关系数并归一化,计算的值越大越相关

cv2.TM_SQDIFF 

多对象模板匹配

np.where()函数完成条件判断

np.where(condition,x,y)#第二和第三个参数可选

  • 当满足condition时返回满足条件的元素坐标,以元组方式
  • 当有x,y时,即满足条件返回x,不满足条件返回y 
img=cv2.imread('mario.png')
img_gray=cv2.cvtcolor(img,cv2.COLOR_BGR2GRAY)
template=cv2.imread('mario_coin',0)
h,w=template.shape[:2]#img.shape[:2]获取高宽
#img.shape[:3]获取高宽通道

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

loc =np.where(res>=threshold)
for pt in zip(*loc[::-1]):
    bottom_templte=(pt[0]+w,pt[1]+h)
    cv2.rectangle(img,pt,bottom_template,(0,0,255),2)

cv_show(img,'img')
cv2.waitKey(0)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值