Python基础之图像识别_这么神奇的博客-CSDN博客_python图像识别
在学习上面文章的时候,我把源码复制下来调试的过程中发现两个问题
1、locateOnScreen识别不到图像
locateOnScreen返回None,原因是默认参数confidence=1,过于精确,导致识别率低,解法调低识别精度即可,为什么是0.9呢? 以为一开始我设置0.5发现经常会点到(手动狗头)
loc = pyautogui.locateOnScreen('zan.png', confidence=0.9)
print(loc)
2、locateOnScreen识别到图像后定位不准
py_w, py_h = pyautogui.size() #返回当前屏幕分辨率
print(py_w, py_h)
pyautogui识别出来的屏幕分辨率是1792*1120
但是pyautogui.locateOnScreen返回的位置却超出此范围。一开始怀疑是接了显示器导致的,把显示器关了还是一样。然后怀疑的Mac视网膜屏的原因,但是看了下这两者的分辨率不是简单倍数关系。
于是我通过把屏幕右上角的菜单按钮截图保存menu.png,进行图像定位
Box(left=3491, top=0, width=92, height=44)
Point(x=1768.5, y=11.0)
由此发现,定位出来的x坐标 + 图片宽度3491+92 = 3583
而pyautogui.size()的宽度1792 * 2 = 3584
二者只差了一个像素,于是得出结论,在视网膜屏上,pyautogui的图像定位坐标与点击坐标相差两倍。于是对原文章的代码改造如下:
#! python3
# -*- coding: utf-8 -*-import pyautogui
import timepy_w, py_h = pyautogui.size() # 返回当前屏幕分辨率
print(py_w, py_h)
ratio = 2.0def zan(loc):time.sleep(0.5) # 等待 0.5 秒left, top, width, height = loccenter = pyautogui.center((left / ratio, top / ratio, width / ratio, height / ratio)) # 寻找 图片的中心print(center)pyautogui.click(center) # 点击print('点赞成功!')def find_and_zan():while True:loc = pyautogui.locateOnScreen('zan.png', confidence=0.9)print(loc)if loc:zan(loc) # 调用点赞函数else:pyautogui.scroll(-500) # 本页没有图片后,滚动鼠标;print('没有找到目标,屏幕下滚~')find_and_zan()
另外有个问题我没整明白,希望有大神路过可以指点下。
为什么pyautogui识别出来的屏幕分辨率是1792*1120,即使是乘以2后,3584*2240,也和实际的分辨率3072*1920不一样啊,这是为啥??