第八节 图像处理之模板匹配

上传者: zhulichao1 | 上传时间: 2022-10-22 12:01:12 | 文件大小: 20KB | 文件类型: DOCX
#模板匹配
import cv2 as cv
import numpy as np

def template_demo():
dog = cv.imread("E:/opencv/picture/dog.jpg")
dog_nose = cv.imread("E:/opencv/picture/nose.jpg")
cv.imshow("dog",dog)
result = cv.matchTemplate(dog,dog_nose,cv.TM_CCORR_NORMED)
h,w =dog_nose.shape[:2]
min_val,max_val,min_loc,max_loc=cv.minMaxLoc(result)
pt1 = max_loc
pt2 = (pt1[0]+w,pt1[1]+h)
cv.rectangle(dog,pt1,pt2,(0,255,0),2)
cv.imshow("match",dog)
print(result)


#src = cv.imread("E:/opencv/picture/dog.jpg")
#cv.imshow("inital_window",src)
template_demo()
cv.waitKey(0)
cv.destroyAllWindows()

分析:
模板匹配通常用于目标检测。本文我们检测狗图片的鼻子。
• 我们需要两个主要组件:
1. 源图像(I):我们期望找到与模板图像匹配的图像
2. 模板图像(T):将与模板图像进行比较的补丁图像
1.
result = cv.matchTemplate(dog,dog_nose,cv.TM_CCORR_NORMED)
void cv::matchTemplate(
cv::InputArray image, // 待匹配图像W*H
cv::InputArray templ, // 模板图像,和image类型相同, 大小 w*h
cv::OutputArray result, // 匹配结果图像, 类型 32F, 大小 (W-w+1)*(H-h+1)
int method // 用于比较的方法
);
其中method有:
TM_SQDIFF_NORMED匹配数值越低表示匹配效果越好
TM_CCORR_NORMED,TM_CCOEFF_NORMED匹配数值越大表示匹配效果越好
result参数:(保存各个点匹配结果的参数)
模板匹配函数cvMatchTemplate依次计算模板与待测图片的重叠区域的相似度,并将结果存入映射图像result当中,也就是说result图像中的每一个点的值代表了一次相似度比较结果
模板在待测图像上每次在横向或是纵向上移动一个像素,并作一次比较计算

我们可以通过cv.minMaxLoc函数来确定结果矩阵的最大值和最小值的位置。
2.
cv.minMaxLoc(result)
返回result数值中最小值以及最小值所在的位置和最大值以及最大值所在的位置。
3.
当知道哪个点匹配度最高时这个时候我们需要用矩阵把模板给标出来
C++: void rectangle(Mat& img, Point pt1,Point pt2,const Scalar& color, int thickness=1, int lineType=8, int shift=0)
第一个参数:要在哪个图像上画?
第二个参数:矩阵的左上角点坐标
第三个参数:矩阵的右下角点坐标
第四个参数:颜色

文件下载

评论信息

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明