使用模板匹配定位游戏中角色位置

注意:本文最初使用jupyter notebook编写,后经程序转换为markdown,所以格式可能有多处错误,懒得修改了。

我们来学习一下如何使用模板匹配寻找目标位置

import cv2
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

先打印一下原图看看,因为OpenCV读取到的是BGR格式所以我们需要转换一下颜色空间

img_bgr = cv2.imread('images/mario.jpg')
img_rgb = cv2.cvtColor(img_bgr,cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)

image

转换成灰度图片

img_gray = cv2.cvtColor(img_bgr,cv2.COLOR_BGR2GRAY)
plt.imshow(img_gray,cmap='gray')

image

打印一下矮人的模板


dwarf = cv2.imread('images/dwarf.png',0)
plt.imshow(dwarf,cmap='gray')

image

使用cv2.matchTemplate函数将图片和模板比较,返回相似度

然后使用cv2.minMaxLoc函数可以找到最相似的坐标


res = cv2.matchTemplate(img_gray,dwarf,cv2.TM\_CCOEFF\_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

w,h = dwarf.shape\[::-1\]
cv2.rectangle(img_rgb, max_loc, (max_loc\[0\] + w, max_loc\[1\] + h), (0,0,255), 2)

plt.imshow(img_rgb)

image

我们再来试一试找出图片中的所有蘑菇


mushroom = cv2.imread('images/mushroom.png',0)
plt.imshow(mushroom,cmap='gray')

image


res = cv2.matchTemplate(img_gray,mushroom,cv2.TM\_CCOEFF\_NORMED)

w,h = mushroom.shape\[::-1\]
threshold = 0.4
loc = np.where( res >= threshold)

for pt in zip(*loc\[::-1\]):
    cv2.rectangle(img_rgb, pt, (pt\[0\] + w, pt\[1\] + h), (0,0,255), 2)

plt.imshow(img_rgb)

image

posted @ 2018-05-24 14:36:38
评论加载中...
发表评论