pyautogui 的截图及图片匹配

2023-11-03

pyautogui 的截图

import pyautogui as pg
# 官网有提在不同的操作系统上,具体操作还不太一样
# 我的环境:win10 + python3.9,截图需依赖 Pillow/PIL 库

# 截全屏
pg.screenshot()  # 只会保存到内存,不会缓存到本地
pg.screenshot('data/screenshot.jpg')  # 指定路径,则会保存到本地
pg.screenshot(imageFilename='data/screenshot.png')  # 注意,路径关键字不是 path 而是 imageFilename

# 按照指定区域截屏
pg.screenshot(region=(300, 300, 500, 500))  # region(x坐标,y坐标,宽度,高度),坐标为指定截图的左上角坐标
pg.screenshot('data/screenshot.jpeg', region=(300, 300, 500, 500))  # 同样也是需要指定路径用于保存到本地

pyautogui 的图片匹配

import pyautogui as pg
import uuid
import os

# 在屏幕中匹配图片,并返回位置相关数据,匹配不到则返回 None
locate_1 = pg.locateOnScreen(image='data/test.png')
print(locate_1)  # Box(left=177, top=614, width=43, height=37)
print(locate_1.left)  # 177  可以通过 .left 等属性获取相应的值
print(locate_1[0])  # 177  也可以通过下标获取相应的值

# “模糊”匹配  --  可以使用参数 confidence 来指定模糊程度,默认是 1,范围是 0 - 1(当然,太低就没意义了)
# 使用该参数要求已经安装好 openCV
# 这里的路径关键字是 image,和上面的 imageFilename 不同,所以建议不要写关键字,直接写路径就好,防止写错
locate_2 = pg.locateOnScreen('data/test.png', confidence=0.9)
print(locate_2)

# 在指定区域内匹配,不指定的话默认是在全屏中匹配  --  region=(left,top,width,height)
locate_3 = pg.locateOnScreen('data/test.png', region=(1877, 1043, 43, 37))  # 测试极限值留下的数据
print(locate_3)
locate_4 = pg.locateOnScreen('data/test.png', region=(0, 1080 - 500, 500, 500))
print(locate_4)
# 这里有个坑,我实测的需满足的条件是(仅供参考):
#   1.所给的宽高,不能小于模板图片的宽高
#   2.left + width <= 1920,top + height <= 1080 (分辨率为 1920 * 1080)
#   3.当指定区域太大的时候(比如大小为 1920 * 1080 甚至超出了 1920 * 1080),上面规则不适用


# 返回匹配到的图片的中心位置坐标
center_point_1 = pg.center(locate_1)
print(center_point_1)  # Point(x=198, y=632)
x, y = center_point_1
print(x, y)  # 198 632
pg.moveTo(center_point_1)  # 这里可以结合鼠标事件,去做相应的操作,效果等同于 pg.moveTo(x, y)

# 还可以这样直接返回匹配到的中心位置坐标
center_point_2 = pg.locateCenterOnScreen('data/test.png')
print(center_point_2)
pg.moveTo(center_point_2)  # Point(x=198, y=632)


# 匹配多个位置
locate_lst = list(pg.locateAllOnScreen('data/test.png'))
print(locate_lst)
# 返回类似这样的数据 [Box(left=285, top=545, width=43, height=37), Box(left=177, top=614, width=43, height=37)]


# 一开始我是从 pycharm 工程目录中截了个图作为模板图(我要匹配的),实测效果是,目录上下滑动情况下(x不变,y变化),无法返回实时的坐标
# 但 左右移动(左右拉动 pycharm)时,能返回实时的坐标。后面截了个桌面图标作为测试,匹配桌面图标时,随便移动也都能返回实时的坐标
# 万一你们也出现无法返回实时坐标的情况怎么解决呢?一开始想清除图片缓存,但似乎没找到合适的办法
# 后面想到一个办法,仅供参考:把 要匹配的图片(目标图片)另存为新的图片,匹配完后再删掉它,这样也可以达到返回最新位置坐标的效果。
# 这里有个坑:整个路径中,不能包含有中文,参考代码如下:
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'test.png')
temp_path = os.path.join(os.path.dirname(file_path), f"{uuid.uuid4()}.png")
os.system(f'copy {file_path} {temp_path}')
# 这里是匹配操作,完后将临时图片删除
os.remove(temp_path)

""" 另
截图 和 匹配图片 需要依赖 pillow/PIL 好 opencv 库
安装 PIL:pip install pillow
安装 opencv:pip install opencv-python
"""

参考链接:pyautogui官网

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyautogui 的截图及图片匹配 的相关文章

  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像

随机推荐

  • 人脸识别OPENCV

    usr bin python coding UTF 8 文件名 test py import os fb open a txt w with open at txt r as alc i 0 for line in alc print li
  • 快速排序python实现

    简述过程 1 设置标准值为列表第一个prime lst 0 2 设置指针cur1 和 cur2 初始位置的索引分别为0和len lst 1 cur1和cur2描述的是索引index 指针2 从列表后方向前遍历 找到比标准值小或者和标准值相等
  • select 中的union 和union all用法

    UNION The UNION command is used to select related information from two tables much like the JOIN command However when us
  • Linux 使用 Systemd 管理进程服务(新手必看)

    systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具 由于init一方面对于进程的管理是串行化的 容易出现阻塞情况 另一方面init也仅仅是执行启动脚本 并不能对服务本身进行更多的管理 所以从CentOS 7
  • python语言结构_Python语言学习之结构的用法

    Python语言的三种结构 顺序结构 将一条一条语句按顺序执行 分支结构 语句执行的时候 有不同的分支来执行 循环结构 当在执行语句时 有些是重复性的代码 即可使用循环进行操作 分支结构 if else 语句 if elif else 语句
  • openswan安装配置手册(RSA)

    下载地址 www openswan org download 下载源码包 openswan 2 6 32 tar gz 64 位CentOS 5 8 系统环境 1 解压编译安装openswan tar xvf openswan 2 6 32
  • 访问zabbix web页面格式混乱不能正常显示的问题

    通过搜索 找到了一个网友的一篇文章 https blog csdn net weixin 45607094 article details 100542394 修改下面的配置文件 把location 的注释去掉 原因是 一些静态文件没有进行
  • JSP中 page指令的应用

    JSP指令中 Page language 值只能 java extends 一定要继承Servlet session true JSP页面内可以直接使用session对象 import 用来导包 buffer和autoFlush 设置缓冲区
  • 浏览器插件crx文件怎么导入到谷歌浏览器

    浏览器插件crx文件怎么导入到谷歌浏览器 作为开发人员 我们少不了和浏览器插件打交道 比如Fehelper插件 我们下载的插件格式基本都是crx为后缀名的 下载好了之后 我们可以直接拖动插件文件到浏览器 会自动添加 然后就可以使用了 但是有
  • Python解离散数学

    离散数学 离散数学是对可数的 不同的或独立的数学结构的研究 一个很好的例子是像素 从手机到电脑显示器再到电视机 现代屏幕由数百万个称为像素的小点组成 这些点排列成网格 每个像素根据设备的命令以指定的颜色亮起 但每个像素只能显示有限数量的颜色
  • 频繁分配释放内存导致的性能问题的分析

    频繁分配释放内存导致的性能问题的分析 现象 1 压力测试过程中 发现被测对象性能不够理想 具体表现为 进程的系统态CPU消耗20 用户态CPU消耗10 系统idle大约70 2 用ps o majflt minflt C program命令
  • map容器的四种插入元素方法

    插入元素 四种插入方法比较 void display map
  • C++程序翻译成C语言程序

    C 程序翻译成C语言程序 C 语言是在C语言的基础上发展过来的 第一个C 的编译器实际上是将C 程序翻译成C原因程序 再通过C语言编译器进行编译 然而C语言中没有类的概念 只有结构 而且函数还是全局函数 没有类成员函数 在翻译时 将clas
  • 【华为OD机试】连续字母长度(C++ Python Java)2023 B卷

    题目描述 给定一个字符串 只包含大写字母 求在包含同一个字母的子串中 长度第k长的子串的长度 相同字母只取最长的那个子串 若子串中只包含同一个字母的子串数小于k 则输出 1 输入描述 第一行有一个字符串 1 lt 长度 lt 100 只包含
  • Git提示 fatal: Not a git repository 错误解决方法

    fatal Not a git repository or any of the parent directories git 提示说没有 git这样一个目录 解决办法如下 git init 然后在进行操作就可以了
  • 大学操作系统原理课程笔记

    进程的概念 定义 可并发执行的程序 在一个数据集合上运行的过程 申请 拥有资源 调度 线程 程序 静态概念 是指令和数据的集合 可长期存储 进程与程序对应关系 a 一个程序可以对应一个进程或多个进程 b 一个进程可以对应一个程序 或者一段程
  • ajax.beginform insertionmode,MVC Ajax.BeginForm InsertionMode

    的JavaScript引用的文件 CSHTML页 using Ajax BeginForm new AjaxOptions UpdateTargetId result LoadingElementId progress InsertionM
  • 【C#学习笔记】保存文件

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • Windows下Qt静态编译全解

    Windows下Qt静态编译全解 2012 04 16 16 59 05 转载 标签 杂谈 分类 QT Windows下Qt静态编译全解 2010 09 08 13 42 分类 QT 编译准备 下载NOKIA网站上的QT SDK 解压或安装
  • pyautogui 的截图及图片匹配

    pyautogui 的截图 import pyautogui as pg 官网有提在不同的操作系统上 具体操作还不太一样 我的环境 win10 python3 9 截图需依赖 Pillow PIL 库 截全屏 pg screenshot 只