意图:准备一张小图,在电脑屏幕上找到小图坐标,并点击。
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
先 pip3 install Pillow 提示已经安装了... ...尴尬
为了进行鼠标点击,安装pyautogui
pip install -i https://pypi.douban.com/simple/ pyautogui
最终代码:
# -*- coding: utf-8 -*-import pyautogui
import cv2
import numpyasnpfromPIL 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获取坐标点。