PyAutoGui图像操作(二):图像定位不稳定解决方案

一,PyAutoGui介绍

        PyAutoGUI是Python功能强大的UI自动化库,其目的是可以用程序自动控制鼠标和键盘操作,主要用来实现PC端的UI自动化。

        ①有鼠标控制、键盘操作、屏幕截图、图片定位、消息对话框、窗口操作等功能;  
        ②有倒计时、鼠标坐标颜色抓取小程序、UI自动化迷你语言等实用工具;  
        ③有故障安全、通用暂停等机制。  

二,PyAutoGui安装

cmd安装命令:

pip install PyAutoGUI

如果因为python或者pip版本安装失败,以下提供一种解决办法:

        1.进入网址:PyAutoGUI · PyPI

        2.下载PyAutoGui后缀为tar.gz的压缩包

        3.在解压目录上输出cmd,回车

        4.输入命令:python setup.py install

三,图片定位不稳定的四种解决方案

        1,方案介绍

        1.模糊定位:借助opencv的来提高识别率,在local函数中加入confidence参数,也就是识别准确度,当confidence越小时,定位的精度就会越低,从而实现模糊定位。

        2.灰度匹配:在local函数中加入grayscale参数,当grayscale=True时会使图像和屏幕截图中的颜色去饱和,可以解决由于显示器饱和度不同从而引起的颜色细微差异因而导致的图像定位失败问题。

        3.指定范围:在local函数中加入region参数,可以控制找图范围,从而提高找图效率。

        4.多图定位:icon在不同场景下可能有不同的显示效果,可以把不同显示效果的多张图片归为一个事件,对多张图进行循环查找,定位一张图就可以对整个事件进行定位。

        2,模糊查询

        opencv的安装命令:

pip install opencv-python

        在pyautogui.locateOnScreen()函数中加入confidence参数,当confidence的值决定精度

>>>t = locateOnScreen('images/test1.png', confidence=0.9)
>>>print(center(t))

Point(x=873, y=1056)

        3,灰度匹配

        在pyautogui.locateOnScreen()函数中加入grayscale=True,就可以实现灰度匹配

>>>t = locateOnScreen('images/test1.png', grayscale=True)
>>>print(center(t))

Point(x=873, y=1056)

        4,指定范围:

        在local函数中加入region参数,可以控制找图范围,从而提高找图效率。

        region(x,y,width,height),其中x,y为范围左上角坐标,width,height为范围的宽和高

>>>t = locateOnScreen('images/test1.png', region=(0,940,1919,939))
>>>print(center(t))

Point(x=873, y=1056)

        5,多图定位

        可以对一个icon截多张不同的图,每一张图都代表这个icon,只要定位其中一张图就能定位这个icon。

        对locateOnScreent()函数进行二次封装,多张图片之间用 ' | ' 间隔,实现循环找图

from pyautogui import *

#把字符串按'|'切割
def word_cut(args):
    tup = []
    if '|' in args:
        re1 = args.split('|')
        return re1
    else:
        tup.append(args)
        return tuple(tup)

#判断图像是否找到,如果找到就返回True,没找到就跳过
def assertPIC(args):
    if locateOnScreen(args) == None:
        pass
    else:
        return True

#循环找图,找到就返回图像中心点,没找到就打印'没找到'
def img_locat(args):
    arg = word_cut(args)
    for i in range(len(arg)):
        if assertPIC(arg[i]):
            return center(locateOnScreen(arg[i]))
        else:
            print('没找到')

#测试
print(img_locat('images/test.png|images/test1.png'))

结果为:

  • 13
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅冒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值