前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之利用opecv图像识别 (模板匹配)

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

作者头像
sjw1998
发布2019-09-28 12:54:08
1.6K0
发布2019-09-28 12:54:08
举报
文章被收录于专栏:孤独的S孤独的S

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

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

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

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
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#结合上面例子

这样即可


补充:

如果没加一个导入模块的类的话,发现很容易误导,我太粗心了。

这里的图像识别是必须在界面的前台的,因为是截图的,如果编辑器挡住要判断的部分是的不出结果的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 孤独的S 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档