gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:47:21 26 4
gpt4 key购买 nike

我想在屏幕上进行一些模式识别,并将使用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)

我不知道该怎么做,也无法通过Google找到信息。

最佳答案

为了增加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)

关于python - 将CGImage转换为python图像(pil/opencv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22938654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com