我一直在尝试将 BGR 捕获的帧转换为 YUYV 格式。
在 OpenCV Python 中,我可以使用转换代码将 YUYV 转换为 BGR,COLOR_YUV2BGR_YUY2
但我无法执行此操作的反向操作(此操作没有转换代码,我尝试过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 格式,但它只有 2 个通道,下采样过程相当复杂。我已经检查了 YUYV 到 BGR 的转换方法,但我找不到数学转换方法(解决方案通常使用命令行中的 ffmpeg 实用程序,但我认为我需要使用 numpy 数组进行数学运算)