Opencv -模板匹配详解

环境

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)

Opencv -模板匹配详解_第1张图片

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)

Opencv -模板匹配详解_第2张图片

你可能感兴趣的:(opencv,Notes)