Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python获取屏幕截图并将其保存到缓冲区_Python_Opencv_Buffer_Python Imaging Library_Screenshot - Fatal编程技术网

Python获取屏幕截图并将其保存到缓冲区

Python获取屏幕截图并将其保存到缓冲区,python,opencv,buffer,python-imaging-library,screenshot,Python,Opencv,Buffer,Python Imaging Library,Screenshot,我想拍摄屏幕截图并将其作为照片保存到缓冲区(X.jpg),以后我可以使用cv2(opencv)从缓冲区读取相同的图像。 我的行动如下: 编辑我的代码: 我发现以下错误: TypeError: img is not a numpy array, neither a scalar 谢谢这里是一个演示: from PIL import ImageGrab from io import BytesIO import numpy as np import cv2 ## (1) Grab the rg

我想拍摄屏幕截图并将其作为照片保存到缓冲区(
X.jpg
),以后我可以使用
cv2(opencv)
从缓冲区读取相同的图像。
我的行动如下:

编辑我的代码: 我发现以下错误:

TypeError: img is not a numpy array, neither a scalar
谢谢

这里是一个演示:

from PIL import ImageGrab
from io import BytesIO
import numpy as np 
import cv2

## (1) Grab the rgb frame as PIL.Image
ii = ImageGrab.grab()
print(type(ii)) # <class 'PIL.Image.Image'>

## (2) Convert PIL.Image to np.array 
rgb = np.array(ii)
print(type(ii)) # <class 'numpy.ndarray'>

## (3) Convert into BGR and display 
bgr = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
cv2.imshow("frame", bgr)
cv2.waitKey()
cv2.destroyAllWindows()
从PIL导入ImageGrab
从io导入字节io
将numpy作为np导入
进口cv2
##(1)抓取rgb帧作为PIL.Image
ii=ImageGrab.grab()
印刷品(第(ii)类)
##(2)将PIL.Image转换为np.array
rgb=np.阵列(ii)
印刷品(第(ii)类)
##(3)转换成BGR并显示
bgr=cv2.CVT颜色(rgb,cv2.COLOR_RGB2BGR)
cv2.imshow(“帧”,bgr)
cv2.waitKey()
cv2.destroyAllWindows()

检查一下,您能解释问题所在并显示您收到的任何错误消息吗?python中的注释也是以#not//可能与我编辑的问题重复开始的。如果您已经将其以JPEG格式保存到磁盘,为什么不直接将文件内容读取到缓冲区中(而不是通过
imread
对其进行解码,然后使用
imencode
进行编码)?或者更好的方法是将PIL图像转换为numpy数组。然后直接
imencode
这样做,而不是往返到文件系统。
from PIL import ImageGrab
from io import BytesIO
import numpy as np 
import cv2

## (1) Grab the rgb frame as PIL.Image
ii = ImageGrab.grab()
print(type(ii)) # <class 'PIL.Image.Image'>

## (2) Convert PIL.Image to np.array 
rgb = np.array(ii)
print(type(ii)) # <class 'numpy.ndarray'>

## (3) Convert into BGR and display 
bgr = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
cv2.imshow("frame", bgr)
cv2.waitKey()
cv2.destroyAllWindows()