使用Python+OpenCV进行图像模板匹配(Match Template)实例-找到百度首页按钮并点击
本文主要参考:http://www.51testing.com/html/01/n-3721401.html
为理解opencv函数,参考了http://woshicver.com/
意图:准备一张小图,在电脑屏幕上找到小图坐标,并点击。
1 安装 opencv 和 numpy:
pip3 install opencv-python
上述命令将 opencv 和 numpy都安装了,可以在类似D:\Python36\Lib\site-packages目录下看到
2 准备小图,用浏览器打开baidu.com,用截图工具或PrtSc键截取百度首页的那个“百度一下”button,另存为bd.png
3、用程序截屏,存为screen.png,导入两张图片,匹配,找到坐标,点击。
由于还没有PIL,先pip3 install PIL 结果提示:No matching distribution found for PIL
参考https://blog.csdn.net/weixin_34214500/article/details/85974177
先 pip3 install Pillow 提示已经安装了... ...尴尬
为了进行鼠标点击,安装pyautogui
pip install -i https://pypi.douban.com/simple/ pyautogui
最终代码:
# -*- coding: utf-8 -*- import pyautogui import cv2 import numpy as np from PIL import ImageGrab #截屏,同时提前准备一张屏幕上会出现的小图bd.png im = ImageGrab.grab() im.save('screen.png','png') #加载原始RGB图像 img_rgb = cv2.imread("screen.png") #创建一个原始图像的灰度版本,所有操作在灰度版本中处理,然后在RGB图像中使用相同坐标还原 img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) #加载将要搜索的图像模板 template = cv2.imread('bd.png',0) #使用matchTemplate对原始灰度图像和图像模板进行匹配 res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) #设定阈值,0.7应该可以 threshold = 0.999 #res大于99.9% loc = np.where( res >= threshold) #得到原图像中的坐标 for pt in zip(*loc[::-1]): print(pt[0],pt[1]) pyautogui.click(pt[0],pt[1]) break #cv2.destroyAllWindows() print("the end")
注意:测试时要把baidu首页的按钮显示在屏幕上。
另外代码好像还是写复杂了,应该可以直接用minMaxLoc获取坐标点。
另参考:https://www.cnblogs.com/mjk961/p/9129211.html
https://blog.csdn.net/weixin_42081389/article/details/87935735
https://www.jianshu.com/p/c20adfa72733
https://docs.opencv.org/master/
https://www.cnblogs.com/chjbbs/p/5077587.html
https://blog.csdn.net/weixin_34214500/article/details/85974177