Opencv -模板匹配详解

12 篇文章 1 订阅

环境

python : 3.6.10
Opencv : 4.1.2
IDE : pycharm

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 定义函数
def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

模板匹配

  • 实现思想:
    原理和卷积操作很像,模板在原始图像上滑动,计算模板与图像的差别程度
    计算差别程度的方法有6种
    然后将每次计算的结果放入一个矩阵,作为输出
    假设原图是AxB大小,模板是a x b 大小
    输出矩阵的大小为 (A-a+1)x(B-b+1)
    最后根据指定的计算差别程度的方法得到最佳匹配

值得注意的是它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。

实例:

img_rgb = cv2.imread('F:/PycharmProjects/pjm_test/mario.jpg')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

在这里插入图片描述

template = cv2.imread('F:/PycharmProjects/pjm_test/mario_coin.jpg', cv2.IMREAD_GRAYSCALE)
cv_show('tem', template)
h, w = template.shape[:2] # 得到模板的高和宽

在这里插入图片描述

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where(res >= threshold)   # 取匹配值大于0.8的坐标
for pt in zip(*loc[:: -1]):   # * 表示可选参数
    bottom_right = (pt[0] + w, pt[1] + h)
    cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 1)

cv_show('img_rgb', img_rgb)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值