简介

该方法用于精确匹配目标。

效果

每张图为正方形,这里画在一起了。原图为最左面部分,模板为匹配原图右下角那个正方形(这里没画出)。
从左到右依次为:原图、正向匹配、原图黑白颠倒、方向匹配、最终结果(有个白色像素点,即为原图右下角的正方形的中心)
drawing

实现

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

img = cv.imread('pic/rectangle_find35.png', -1) # 原图,把 imread 第一个参数换成你实际的图片路径
K = np.zeros((37,37), np.uint8)
K[1:36, 1:36] = 1 # K 为要匹配的模板,应在外圈加圈目标的反色。

hm1 = cv.morphologyEx(img, cv.MORPH_HITMISS, K) 
hm2 = cv.morphologyEx(255-img, cv.MORPH_HITMISS, 1-K)

hm = cv.bitwise_and(hm1, hm2) 

yx = np.where(hm == 255) # 匹配成功的点坐标
print('Matched in', (yx[0][0],yx[1][0]))

plt.imshow(np.hstack([img, hm1, hm2, hm]))
plt.show()

感觉OpenCV的HITMISS没有封装好,不能直接得到想要的结果,这里就分成了好几步。


说明:

  1. 未经许可,谢绝转载。
  2. 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
    免费视频教程为0-6章(标题号≤6),可在此处点击观看。
    所有课件及源代码可在此处下载:
    链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
    提取码:11o4
    有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。