OpenCV:模板匹配matchTemplate

1 介绍

模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。OpenCV 为我们提供了函数:cv2.matchTemplate()。和2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置对模板图像和与其对应的输入图像的子区域进行比较。OpenCV 提供了几种不同的比较方法(细节请看文档)。返回的结果是一个灰度图像,每一个像素值表示了此区域与模板的匹配
程度。

如果输入图像的大小是(WxH),模板的大小是(wxh),输出的结果的大小就是(W-w+1,H-h+1)。当你得到这幅图之后,就可以使用函数cv2.minMaxLoc() 来找到其中的最小值和最大值的位置了。第一个值为矩形左上角的点(位置),(w,h)为moban 模板矩形的宽和高。这个矩形就是找到的模板区域了。

2 代码 

import cv2 as cv
import os
import numpy as np

def template_demo(tpl_imgPath,target_imgPath,save_path):
    tpl =cv.imread(tpl_imgPath)
    target = cv.imread(target_imgPath)
    image_name = str(os.path.basename(target_imgPath).split('.')[0])
    print(image_name)
    methods = [cv.TM_SQDIFF_NORMED, cv.TM_CCORR_NORMED, cv.TM_CCOEFF_NORMED]   #3种模板匹配方法
    th, tw = tpl.shape[:2]
    for md in methods:
        # print(md)
        result = cv.matchTemplate(target, tpl, md)
        min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)
        if md == cv.TM_SQDIFF_NORMED:
            tl = min_loc
        else:
            tl = max_loc
        br = (tl[0]+tw, tl[1]+th)   #br是矩形右下角的点的坐标
        cv.rectangle(target, tl, br, (0, 0, 255), 2)
        cv.imwrite(os.path.join(save_path,image_name + '_match_' + np.str(md) + '.jpg'),target)

def SJ_matchTemplate(tpl_imgPath,source_path,save_path):
    if not os.path.exists(source_path):
        return
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    for img in os.listdir(source_path):
        if img.split('.')[1] == 'jpg':
            template_demo(tpl_imgPath, os.path.join(source_path,img), save_path)
            print(img)

if __name__ == '__main__':
    # template_demo('18711-left-object.jpg','E:\\SJ\\19169-left.jpg','E:\\SJ_match\\')
    SJ_matchTemplate('1.jpg',r'E:\\lvt_YBL\\jpg','E:\\lvt_YBL\\jpg_match')

3 效果 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值