pyautogui找不到图片 pyautogui.locate返回值为None

pyautogui是个挺好用的小工具,会点py就能写一些很方便的脚本。
尤其是图片查找这个功能,不需要懂视觉就可以查找指定的图片,例如在屏幕中找某个图片素材,比如我想写个记牌器,只要把扑克牌的素材弄好就可以了。
但是由于毕竟不是视觉AI,所以还是比较笨的,pyautogui.locate这个函数应该很多人都在用,今天简单谈谈可以优化的地方。
首先要指定范围,现在的电脑分辨率动不动就2k甚至4k,如果全屏查找是比较慢的,也费电脑资源,所以可以固定屏幕位置来大幅度提高查找效率,用这个函数就行了,pyautogui.screenshot(region=(left, top, width, height))
其次,这个方法是比较笨的,就是完全比对数据,差一丢丢都不可以,所以用其他的截图软件可能导致图片不一样,这也是死活都找不到图像,pyautogui.locate返回值为None的核心原因。
最好的方法就是加个参数:confidence=0.9。
网上好多帖子都不告诉你这个服了。。。我也是查了半天才发现,常弄视觉ai的都知道,这个是置信度的意思,这样以来就不用要求图像必须分毫不差了!!!
完整语句就这么写就行pyautogui.locate(target_image,screenshot,confidence=0.9)
当然这个参数也可以根据实际改 比较灵活
注意:此方法需要安装opencv 否则报错!!!

上一个近期写的小工具,仅供参考,功能是检测电脑左上角的图标,有变化就通过串口发送给单片机做电机驱动,大家灵活改。

import pyautogui
import keyboard
import time
from serial.tools import list_ports
import serial

port_list = list(list_ports.comports())
num = len(port_list)
mark=True
if num <= 0:
    print("NO COM")
else:
    for i in range(num):
        port = list(port_list[i])
        COM=port[0]
        
print(COM)

ser = serial.Serial(COM, 115200)


left = 0
top = 0
width = 100
height = 100
target_image = 'jd.jpg'
while True:
    if keyboard.is_pressed('esc'):
        break
    screenshot = pyautogui.screenshot(region=(left, top, width, height))
    fresh=pyautogui.screenshot(region=(55, 38, 30, 30))
    #fresh.save('jd.jpg')
    target_position = pyautogui.locate(target_image,screenshot,confidence=0.9)
    #print(target_position)
    #print(mark)
    if target_position is not None:
        if mark:
            #center_x = target_position.left + (target_position.width / 2)
            #center_y = target_position.top + (target_position.height / 2)
            #print("目标图像中心坐标:", center_x, center_y)
            try:
                delay = round((0.1 + 0.7 * time.time() % 1), 2)
                time.sleep(delay)
                ser.write(b'click')
                print('click')
                time.sleep(0.5)
                mark=False
            except:
                print('browse first')
    else:
        mark=True
        
print("end")





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值