使用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://blog.csdn.net/Moelimoe/article/details/97055294?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

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

https://www.cnblogs.com/daysn/p/11424980.html