苹果MAC视网膜屏pyautogui的坐标转换

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视网膜屏的原因,但是看了下这两者的分辨率不是简单倍数关系。

苹果MAC视网膜屏pyautogui的坐标转换_第1张图片

于是我通过把屏幕右上角的菜单按钮截图保存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 time

py_w, py_h = pyautogui.size()  # 返回当前屏幕分辨率
print(py_w, py_h)
ratio = 2.0


def zan(loc):
    time.sleep(0.5)  # 等待 0.5 秒
    left, top, width, height = loc
    center = 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不一样啊,这是为啥??

你可能感兴趣的:(Python菜鸟成长记,python,开发语言)