匹配图像

2022-05-28 16:07:55 浏览数 (2)

代码语言:javascript复制
import cv2
import numpy as np
from matplotlib import pyplot as plt
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png',0)#原始图像
template=cv2.imread('C:/Users/xpp/Desktop/temp.png',0)#模板图像
th,tw=template.shape[::]#模板图像的宽度w和高度h
rv=cv2.matchTemplate(img,template,cv2.TM_SQDIFF)#cv2.TM_SQDIFF匹配方法
minVal,maxVal,minLoc,maxLoc=cv2.minMaxLoc(rv)#查找最值(极值)所在位置
topLeft=minLoc#以topLeft作为模板匹配位置的左上角坐标
bottomRight=(topLeft[0] tw,topLeft[1] th)#模板匹配位置的右下角坐标
cv2.rectangle(img,topLeft,bottomRight,255,3)#topLeft是矩形顶点,bottomRight是对角顶点,255是灰度级,3矩形边线宽度
plt.subplot(121),plt.imshow(rv,cmap='gray')
plt.title('Matching Result'),plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(img,cmap='gray')
plt.title('Detected Point'),plt.xticks([]),plt.yticks([])
plt.show()

算法:图像匹配的查找方式是将模板图像在输入图像内从左上角开始滑动,逐个像素遍历整幅输入图像,从而查找与模板图像最匹配的部分。

  • 首先将模板图像置于输入图像的左上角
  • 模板图像向右移动
  • 模板图像向下移动

匹配方法:

  • 当method为cv2.TM_SQDIFF_*时,rv值越小,匹配效果越好
  • 当method为cv2.TM_CCORR_*和cv2.TM_CCOEFF_*时,rv值越大,匹配效果越好。

注意:输入图像是8位或32位浮点型图像;模板图像尺寸小于或等于输入图像。

0 人点赞