我一直在尝试将BGR捕获的帧转换为YUYV格式。
在OpenCV Python中,我可以使用COLOR_YUV2BGR_YUY2
转换代码将YUYV转换为BGR,但是我无法执行此操作的反向转换(没有转换代码)。我尝试了COLOR_BGR2YUV
,但它没有正确转换。我想知道如何将3通道的BGR帧转换为2通道的YUYV帧。
这里您可以看到我正在使用的代码,将相机模式更改为捕获YUYV并将其转换为BGR,我正在寻找替换cap.set(cv2.CAP_PROP_CONVERT_RGB, 0)
的方法,以便我可以捕获BGR并将其转换为YUYV而不需要cap.set(cv2.CAP_PROP_CONVERT_RGB, 0)
(因为它是一个可选的捕获设置,Windows DirectShow忽略此标志)。
import cv2
import numpy as np
cap = cv2.VideoCapture(4)
_, frame = cap.read()
cap.set(cv2.CAP_PROP_CONVERT_RGB, 0) # How to replace this line with another BGR to YUYV conversion?
_, frame_rgb_off = cap.read()
bgr_cvt = cv2.cvtColor(frame_rgb_off, cv2.COLOR_YUV2BGR_YUY2)
以下是调试器输出,显示帧内容:
我试图理解YUYV格式,但它只有两个通道,并且降采样过程非常复杂。我已经检查了YUYV到BGR的转换方法,但我没有找到数学转换方法(解决方案通常使用命令行中的ffmpeg实用程序,但我认为需要使用numpy数组进行数学处理)。