gpt4 book ai didi

python - 将 PIL 图像转换为 OpenCV2 图像

转载 作者:太空宇宙 更新时间:2023-11-03 21:45:06 25 4
gpt4 key购买 nike

我正在使用 entireScreen=ImageGrab.grab() 创建一个屏幕截图,然后使用 openCV2 进行一些分析以测试屏幕是否包含某些模板图像。这些模板使用 template = cv2.imread(name,0) 加载。

我现在遇到以下问题:在将我的屏幕截图与模板进行比较时,我总是需要先保存我的屏幕截图:

entireScreen.save('pics/screenshot.png', format='png')

然后重新加载它:

cv2.imread('screenshot.png',0)

否则以下将不起作用:

res = cv2.matchTemplate(img,template,method)

我会收到这样的错误消息:

类型错误:图像不是 numpy 数组,也不是标量

我的问题:如何将 entireScreen=ImageGrab.grab() 中的屏幕截图转换为与 opencv2 兼容的格式,而无需保存然后使用 cv2.imread 重新加载。

最佳答案

在 linux 系统上,可以使用 pyscreenshot作为其 docs 状态,它是 ImageGrab 模块的替代品,它仅适用于 Windows。

所以,在我的 linux 系统上我做了这样的事情 -

import pyscreenshot as ImageGrab

然后,您可以抓取屏幕截图并直接在内存空间中以 numpy 数组的形式访问它,而无需实际保存到磁盘上并使用 imread 读取,就像这样 -

img = np.array(ImageGrab.grab().convert('RGB'))

img 可以按原样与 cv2.matchTemplate 一起使用。


一步一步的样本运行和输出验证 -

In [32]: import pyscreenshot as ImageGrab

In [33]: img = np.array(ImageGrab.grab().convert('RGB'))

In [34]: img.shape
Out[34]: (768, 1366, 3)

In [35]: img.dtype
Out[35]: dtype('uint8')

下面是一个运行示例,展示了 cv2.matchTemplate 如何与 img 一起使用 -

In [41]: res = cv2.matchTemplate(img[:,:,0],img[10:40,50:80,0],cv2.TM_SQDIFF)

In [42]: np.where(res<10) # 10 is threshold for matching
Out[42]: (array([10]), array([50]))

关于python - 将 PIL 图像转换为 OpenCV2 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918978/

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