【问题标题】:Python Opencv output.avi screengrab color is blue intensivePython Opencv output.avi screengrab 颜色是蓝色密集的
【发布时间】: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


【解决方案1】:

OpenCV 期望图像是 BGR。您的屏幕抓取是 RGB。因此,要让 openCV 正确显示/保存图像,您需要将其转换为 BGR。似乎你几乎在那里,因为你显然想出了如何转换为灰色。转换成BGR基本一样:

    img_np = np.array(img)
    frame = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
    cv2.imshow("frame", frame)
    cv2.imshow("img", img_np)

这会导致以下结果:
左边是未处理的,右边是颜色转换的。徽标确实应该是蓝色的。

【讨论】:

  • 事实证明,灰色也不能正常工作。我使用 BGR2RGB 得到了相同的结果。当录制窗口与主窗口重叠时,它似乎可以正常工作。
  • 你在看适应的框架吗?上面代码中的vid.write(img_np) 应该是vid.write(frame) 以保存转换后的图像。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多