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)
代码适用于全屏捕获。它只会让一切都变成蓝色。它主要将所有红色更改为深蓝色。它很烦人。
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)
这将导致以下结果:
左侧未处理,右侧进行颜色转换。标志确实应该是蓝色的。