【发布时间】:2019-12-16 15:45:36
【问题描述】:
当我尝试对屏幕执行视频捕获时,输出文件的输出中总是有更多的蓝色。它从不完全复制颜色。
我已经尝试了几种不同的编解码器,以便将fourcc 与opencv 和视频编写器一起使用。我尝试过使用 .mjpg 和 XVID .avi 文件类型的 MJPG。还尝试将 .convert('RBGA') 添加到 ImagrGrab.grab() 行的末尾。例如 ImageGrab.grab().convert('RGBA')
from PIL import ImageGrab
from PIL import ImageColor
import cv2
import numpy as np
def run():
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vid = cv2.VideoWriter('test5.mjpg', fourcc, 8, (width, height))
while(True):
img = ImageGrab.grab(bbox=(0, 0, width, height))#testSpec: bbox=(0, 0, 800, 1000)
img_np = np.array(img)
# frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)
vid.write(img_np)
## Visually inspect recording in progress, by showing frame.
# cv2.imshow("frame", img_np) #frame
key = cv2.waitKey(1)
if key == 27:
break
vid.release()
cv2.destroyAllWindows();
代码适用于全屏捕获。它只会让一切变成蓝色。它主要将所有红色变为深蓝色。这很烦人。
【问题讨论】:
-
OpenCV 使用 BGR 颜色而不是 RGB,因此您必须在写入文件之前对其进行转换
-
会在转换部分实现吗?
-
ValueError: 不支持从 RGB 到 BGR 的转换
-
img = ImageGrab.grab(bbox=(0, 0, width, height)).convert('BGR')#bbox=(0, 0, 800, 1000) 文件“C:\ Program Files\Python37\lib\site-packages\PIL\Image.py",第 1061 行,在 convert im = im.convert(mode, dither)
-
这是将fourcc更改为XVID,将writer更改为.avi。在 MJPG 中它甚至没有运行。 OpenCV: FFMPEG: tag 0x47504a4d/'MJPG' 不支持编解码器 id 7 和格式 'mjpeg / raw MJPEG video' Traceback(最近一次通话最后):
标签: python numpy opencv python-imaging-library