Python之利用opecv图像识别 (模板匹配) !

这是一个相对好玩的,你可以利用图像识别做很多事情,但是这种模板匹配的方法是相对比较笨的方法,对于我正在学习的神经网络所实现的图像识别来说,模板匹配的健壮性不是很好,不过还是有很多事情可以用模板匹配做到的。

模板匹配的意思是,拿两张图片,或者是一张大图一张小图,在大图中判断有没有类似小图的像素,如果有则匹配的上,反则没有匹配,大致就像,有一张模板图片,然后一张测试图片,拿着模板图片在测试图片中找相同的地方。

 

 

 

 

 Python学习交流群:1004391443

例如,这样一张图作为模板匹配在判断的时候,如果测试人物左转一下,便判断不出来。

 

opencv作为模板匹配的方法有很多种:

CV_TM_SQDIEF平方差匹配法,最好匹配为0,值越大匹配越差

CV_TM_SQDIEF_NORMED归一化平方差匹配法

CV_TM_CCORR相关匹配法,采用乘法操作,数值越大表明匹配越好

CV_TM_CCORR_NORMED归一化相关匹配法

CV_TM_CCOEFF相关系数匹配法,最好匹配为1,最差为-1

CV_TM_CCOEFF_NORMED归一化相关系数匹配法

寻找最值--minMaxLoc()

minVal:返回最小值的指针,若无需返回,则设置0

maxVal:返回最大值的指针,若无需返回,则设置0

minLoc:返回最小位置的指针,若无需返回,则设置0

maxLoc:返回最大位置的指针,若无需返回,则设置0

img_m = ImageGrab.grab()#桌面截图
img_c = cv2.cvtColor(np.asarray(img_m),  cv2.COLOR_RGB2BGR)#转化成cv2的模式
os.chdir('C:/Users/炜哥/PycharmProjects/Dnf/Monsterpic/')#取出模板图片
img_l = ac.imread("monster_1.png")#读取模板图片
mmaxpos = cv2.matchTemplate(img_c, img_l, cv2.TM_CCOEFF_NORMED)#匹配的结果
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(mmaxpos)#在结果中取出坐标
pt = max_loc
mminpos = cv2.matchTemplate(img_c, img_l, cv2.TM_SQDIFF_NORMED)#第二种方式匹配
nmin_val, nmax_val, nmin_loc, nmax_loc = cv2.minMaxLoc(mminpos)
minpt = nmin_loc
if pt == minpt:
    print(pt)
    print(minpt)
    return pt
else:
    return None

上面例子实现的在模板图片与桌面截图的匹配,从而判断截图中的游戏界面里有没有怪物存在,其中利用了两种方法的匹配,然后比较其结果有没有一样,如果一样则输出坐标(这个坐标是左上角的坐标,再具体操作的话需要减去模型的x或y,便可以得到想要的坐标)

不同的方法的坐标放在不一样的值里。

其中opencv模板匹配函数matchTemplate()

drawpos = cv2.matchTemplate(img_d1, imgdraw, cv2.TM_CCOEFF_NORMED)

其中,img_d1是测试图片,就是想要从中判断有没有模板图片的图片,即上面程序的截图位置

imgdraw:是模板图片,假设我们要从A图片中判断有没有B图片,这个B图片就是模板图片

cv2.TM_CCOEFF_NORMED:即是我们的匹配方法。

如果想要取出坐标的x和y

(x, y) = pt#结合上面例子

这样即可

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值