Python Opencv output.avi 屏幕抓取颜色是蓝色密集的

imh*_*tep 2 python opencv numpy python-imaging-library

当我尝试执行屏幕的视频捕获时,输出文件中的输出总是有更多的蓝色。它永远不会完全复制颜色。

我已经尝试了几种不同的编解码器,以便与 opencv 和视频编写器一起使用 Fourcc。我尝试过使用 .mjpg 和 XVID .avi 文件类型的 MJPG。还尝试将 .convert('RBGA') 添加到 ImagrGrab.grab() 行的末尾。ex 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(); 
Run Code Online (Sandbox Code Playgroud)

代码适用于全屏捕获。它只会让一切都变成蓝色。它主要将所有红色更改为深蓝色。它很烦人。

J.D*_*.D. 7

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)
Run Code Online (Sandbox Code Playgroud)

这将导致以下结果:
左侧未处理,右侧进行颜色转换。标志确实应该是蓝色的。

在此处输入图片说明