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

PyAutoGui图像 *** 作(二):图像定位不稳定解决方案,第1张

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'))

结果为:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5700600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存