在当今数字化时代,计算机视觉作为人工智能领域的一个重要分支,正迅速发展并广泛应用于我们生活的方方面面。从简单的图像编辑到复杂的场景理解,计算机视觉技术不断推动着科技创新的边界。在这个领域,OpenCV(Open Source Computer Vision Library)扮演着一个核心的角色。自1999年由Intel公司创立以来,OpenCV已经成长为一个功能丰富、性能卓越的开源计算机视觉和机器学习软件库。
OpenCV以其跨平台性、多语言支持和易用性,为全球的研究人员和开发者提供了一个强大的工具集。它不仅包含了基础的图像处理和分析功能,还涵盖了高级的机器学习算法和深度学习模型。无论是在学术研究还是在工业应用中,OpenCV都是实现计算机视觉解决方案的理想选择。
OK!!那就开始了解这项技术吧!!
这个项目一共要使用几个库,分别是:
pyautogui
cv2
time
没有的库可以使用pip安装:
pip install "需要安装的库"
关于cv2这个库我在之前的一篇文章里已经交给过大家如何安装了,就是我的第一篇文章,大家不知道的可以去看一下。
系统:windows
language:Python
第一步
第一步自然是导入模块:
import pyautogui
import cv2
import time
然后完成一个屏幕快照(就是用程序完成截屏),并将其保存在本地
time.sleep(2)
im = pyautogui.screenshot()
im.save("dangxiaceshi.png")
程序在这里执行的话,就会创建一个.png图片:
这样就准备好了屏幕的截图,然后还需要准备好一张你需要识别对照的图片
第二步
然后我们要用cv2库去解析这两张图片:
screen = cv2.imread("dangxiaceshi.png")
filephoto = cv2.imread("filePhoto.png") # 这里是填你需要对比的图片
这样我们就拥有了读取好的两个对象
接着在屏幕快照中对比按钮图片,定位其准确位置
result = cv2.matchTemplate(filephoto, screen, cv2.TM_CCOEFF_NORMED)
print(result)
这里返回的是一堆二维列表
[[-0.00956279 -0.02620975 -0.04090587 ... -0.16048051 -0.15173098
-0.14247805]
[-0.01235431 -0.02825959 -0.04199527 ... -0.14669055 -0.1386818
-0.12976056]
[-0.01532061 -0.03045696 -0.04302071 ... -0.13442378 -0.12651582
-0.11721867]
...
[-0.07626744 -0.06629921 -0.05211597 ... 0.09116595 0.0717186
0.05216556]
[-0.09266812 -0.0841197 -0.0712975 ... 0.08265855 0.0650967
0.0472076 ]
[-0.1092561 -0.10233315 -0.09105043 ... 0.08485452 0.06790818
0.04974034]]
这里我们去获取最相似的坐标点
获取最相似坐标
我们需要时用到 cv2.minMaxLoc()方法
pos_start = cv2.minMaxLoc(result)
print(pos_start)
然而会返回包含着四个元素的元组;
(-0.4423578977584839, 0.9812589883804321, (113, 3), (1319, 1542))
含义为:
最不相似点分数,最相似点分数,最不相似点坐标,最相似点坐标
而我们需要的为最相似的坐标,故将代码修改为:
post_start = cv2.minMaxLoc(result)[3]
就是取走了最后一个第四位元素
定位到图片中心位置
我们要利用shape方法,
.shape 返回一个元组,包含三个整数,分别代表图像的高(行数)、宽(列数)和颜色通道数。
x = int(post_start[0]) + int(filephoto.shape[1]/2)
y = int(post_start[1]) + int(filephoto.shape[0]/2)
故而便能得到相似点中心的x, y两点坐标
那我们就能在当前图像下定位到了,再加入一个右键点击的行为吧:
pyautogui.click(x,y, button='right')
这样就完成了一个识别点击的程序
当当!!
--------
本文章的源码已经放在资源里
希望可以帮助到你!!