将 CGImage 转换为 python 图像 (pil/opencv)

2023-12-07

我想在屏幕上进行一些模式识别,并将使用 Quartz/PyObjc 库来获取屏幕截图。

我得到的屏幕截图是 CGImage。我想使用 openCV 库搜索其中的模式,但似乎找不到如何将数据转换为 opencv 可读的。

所以我想做的是:

#get screenshot and reference pattern
img = getScreenshot() # returns CGImage instance, custom function, using Quartz
reference = cv2.imread('ref/reference_start.png') #get the reference pattern

#search for the pattern using the opencv library
result = cv2.matchTemplate(screen, reference, cv2.TM_CCOEFF_NORMED)

#this is what I need
minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(result)

我不知道如何做到这一点,也无法通过谷歌找到信息。


要添加到 Arqu 的答案中,如果您的最终目标是使用 opencv 或 numpy,您可能会发现使用 np.frombuffer 而不是首先创建 PIL 图像更快,因为 np.frombuffer 与 Image.frombuffer 花费的时间大约相同,但节省了时间从图像转换为 numpy 数组的步骤(在我的机器上大约需要 100 毫秒(其他所有操作大约需要 50 毫秒))。

import Quartz.CoreGraphics as CG
from PIL import Image 
import time
import numpy as np

ct = time.time()
region = CG.CGRectInfinite

# Create screenshot as CGImage
image = CG.CGWindowListCreateImage(
    region,
    CG.kCGWindowListOptionOnScreenOnly,
    CG.kCGNullWindowID,
    CG.kCGWindowImageDefault)

width = CG.CGImageGetWidth(image)
height = CG.CGImageGetHeight(image)
bytesperrow = CG.CGImageGetBytesPerRow(image)

pixeldata = CG.CGDataProviderCopyData(CG.CGImageGetDataProvider(image))
image = np.frombuffer(pixeldata, dtype=np.uint8)
image = image.reshape((height, bytesperrow//4, 4))
image = image[:,:width,:]

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

将 CGImage 转换为 python 图像 (pil/opencv) 的相关文章

  • 编辑 scikit-learn 决策树

    我想编辑 sklearn DecisionTree 例如改变条件或切割节点 叶子等 但似乎没有功能可以做到这一点 如果我可以导出到文件 编辑它以导入 如何编辑决策树 环境 Windows 10 python3 3 sklearn 0 17
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • 为什么 tkinter / window.update 在我的程序中随着时间的推移变得更慢?

    我发现当我调用 window update 时 当向窗口写入的内容较少时 它的运行速度会更快 但后来 当我向窗口写入更多元素时 window update 需要更长的时间 请参阅下面的我的代码 您可以看到它在更新窗口之前一次向屏幕 100
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • Python sqlite3游标没有属性commit

    当我运行这段代码时 path Scripts wallpapers single png conn sqlite3 connect Users Heaven Library Application Support Dock desktopp
  • 如何从谷歌云存储桶读取音频文件并在datalab笔记本中使用ipd播放

    我想在数据实验室笔记本中播放我从谷歌云存储桶中读取的声音文件 这个怎么做 import numpy as np import IPython display as ipd import librosa import soundfile as
  • libtiff 错误:未配置旧式 JPEG 压缩支持

    在 Mac OS X 上使用 libtiff 将 TIFF 转换为 BMP 时 出现以下错误 scannerdata tif Old style JPEG compression support is not configured scan
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何从 Python 中指定运行程序的输入文件?

    我正在编写一个外部脚本 以通过笔记本电脑上的 Python mrjob 模块 而不是在 Amazon Elastic Compute Cloud 或任何大型集群上 运行 mapreduce 作业 我读自mrjob文档 http packag
  • 杂乱的扭曲连接在不干净的时尚中消失了。没有代理。已经尝试过标题

    我正在尝试抓取这个网站 https www5 apply2jobs com jupitermed ProfExt index cfm fuseaction mExternal searchJobs https www5 apply2jobs
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • 辅助功能标识符在 iOS 模拟器的辅助功能检查器中不可见

    我想使用辅助功能检查器来验证在模拟器 iOS 9 2 中运行的应用程序中的所有辅助功能标识符 辅助功能检查器能够返回多个辅助功能字段 但不能返回标识符 知道为什么以及如何我能看到它们吗 实际上有一种方法 克里斯 普林斯 Chris Prin
  • 求解不等式系统时“多项式错误:仅允许使用单变量多项式”

    我想找到以下两个常数的区间cons1 and cons2我写了下面的代码 from sympy import Poly from sympy import Abs from sympy solvers inequalities import
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • 为什么 bot.get_channel() 会产生 NoneType?

    我正在制作一个 Discord 机器人来处理公告命令 当使用该命令时 我希望机器人在特定通道中发送一条消息 并向用户发送一条消息以表明该命令已发送 但是 我无法将消息发送到频道 我尝试了这段代码 import discord import
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • SQLAlchemy:避免声明式样式类定义中的重复

    我正在使用 SQLAlchemy 并且我的对象模型中的许多类具有相同的两个属性 id 和 整数和主键 以及名称 字符串 我试图避免在每个类中声明它们 如下所示 class C1 declarative base id Column Inte
  • 在Python中从日期时间中减去秒

    我有一个 int 变量 它实际上是秒 让我们调用这个秒数X 我需要得到当前日期和时间 以日期时间格式 减去的结果X秒 Example If X是 65 当前日期是2014 06 03 15 45 00 那么我需要得到结果2014 06 03

随机推荐

  • 创建 SQL Server ODBC 数据源的最简单、最可维护的方法是什么?

    我需要一种编程方式来创建 SQL Server ODBC 数据源 我可以通过直接访问注册表来做到这一点 如果可以通过可用的 SQL Server Windows API 来完成此操作 以防止注册表项或值因更新的 SQL Server 驱动程
  • ASP.NET MVC 中的@Url.Action 到action formaction?

    我一天的大部分时间都在追这个问题 有很多很棒的建议 但没有一个能解决我的所有问题 我们有一个现有的网站 其中有人将按钮 href 链接到绝对地址 我正在尝试找出一种方法来做到这一点 我已经掌握了大部分内容 但是带有样式按钮和 formact
  • 如何在Windows Phone 8中异步发送带参数的POST请求

    我想在 Windows Phone 8 环境中发送 POST 请求 我的代码运行成功 但出现 NotFound 异常 它的意思是我想发布一些数据 但我发送的是空值 所以请让我知道如何在 Windows Phone 8 环境中使用数据异步发送
  • MVC 3 项目中的奇怪异常

    我在 MVC 3 0 RC 项目中遇到奇怪的错误 看来它对我的申请不是同质应用程序域昨天还好好的 不知道有什么变化 System InvalidOperationException was unhandled by user code Me
  • 使用PHP形成跨域POST请求

    我正在尝试将数据从表单发送到 php 文件 以便我可以将其存储在数据库中 但它不起作用 表单的代码与 php 文件不在同一服务器上 因为表单将位于移动应用程序上 html div div div div
  • 是否可以在 msys /mingw 上模拟进程替换(使用 bash 3.x)

    我正在尝试使用进程替换来避免使用临时文件 我尝试了以下方法 diff lt echo a lt echo b 在 mingw32 msys 上 来自http www mingw org 截至 2013 年 12 月 并得到 sh synta
  • 将画布保存为 JSON 并将 JSON 加载到画布

    我想做到这一点 以便当我按下 保存 按钮时 文件资源管理器会打开并选择我选择保存画布 JSON 文件的位置 我还希望能够通过加载按钮加载带有 JSON 文件的画布 我该如何开始呢 任何帮助表示赞赏 我希望这就是您想要实现的目标 var ca
  • 如何将 JSON 字符串转换为字典?

    我想在我的 swift 项目中创建一个函数 将 String 转换为 Dictionary json 格式 但出现一个错误 无法转换表达式的类型 lvalue NSData options IntegerLitralConvertible
  • 我应该先学C再学C++吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 今天我参观了大学计算机科学
  • 我需要 jquery 中的脚本,使该页面成为浏览器中的默认主页网站

    我需要 jquery javascript 中的脚本 使特定站点作为浏览器中的主页 如果可能的话 我需要它与所有浏览器兼容 我并不是说它应该自动完成 thanks 在 Internet Explorer 7 及更早版本中 可以使用以下命令来
  • 为什么在 Skylake-Xeon 上写入 2 个缓存行的部分内容时,`_mm_stream_si128` 比 `_mm_storeu_si128` 慢很多?但对Haswell影响较小

    我的代码如下所示 简单加载 修改 存储 我已简化它以使其更具可读性 asm volatile vzeroupper while m128i in mm loadu si128 inptr m128i out in real code doe
  • 我可以在 PostgreSQL 中自动从带有标题的 csv 文件创建表吗?

    我在 OS X 10 6 8 上运行 PostgreSQL 9 2 6 我想将带有列标题的 CSV 文件中的数据导入到数据库中 我可以用COPY语句 但前提是我首先手动创建一个表 并为 CSV 文件中的每一列创建一个列 有什么方法可以根据
  • 相当于不依赖innerHTML的html_entity_decode的javascript?

    我正在寻找 PHP 的 javascript 版本html entity decode 我找到了这个 function html entity decode str var tarea document createElement text
  • 启动第二个 JavaFX 应用程序

    我正在尝试从 JavaFx 应用程序中启动 JavaFx 应用程序 但看起来 Application launch 只能调用一次 这是否意味着我必须启动一个单独的 JVM 如 exec java 或者还有其他方法吗 更多背景信息 我希望我的
  • 从函数中的列表中返回项目。蟒蛇[重复]

    这个问题在这里已经有答案了 my list a b c def func input for i in input print i print func my list Output a b c None 我不想要 无 所以如何执行一行代码
  • UIScrollView 不随 UItextfields 一起滚动

    我正在制作一个普通视图 用户可以在其中更新他们的个人资料 我按照以下步骤制作了该视图 创建了一个新的UIViewController带有 xib 文件 Added a UIScrollView在超级视图中 添加了近9个UITextField
  • 使用 .onLoad 加载依赖包

    我的包需要 ggplot2 包 但我无法修复运行 R CMD 检查时得到的以下注释 no visible global function definition for qplot library or require call not de
  • 这个比较器是如何工作的?

    package vehicles order import java util ArrayList import java util Collections import java util Iterator public class ve
  • 理解 let 与 var 提升 [重复]

    这个问题在这里已经有答案了 With let vs var我了解到主要区别在于 let 变量的作用域为最近的块并且不会被提升 也让变量可以重新赋值 但不能在同一作用域内重新声明 那么为什么这段代码会返回 未定义 错误呢 let x 10 i
  • 将 CGImage 转换为 python 图像 (pil/opencv)

    我想在屏幕上进行一些模式识别 并将使用 Quartz PyObjc 库来获取屏幕截图 我得到的屏幕截图是 CGImage 我想使用 openCV 库搜索其中的模式 但似乎找不到如何将数据转换为 opencv 可读的 所以我想做的是 get