cv2 cvtColor YUV转换错误

问题描述

我正在尝试使用笨拙的视频格式,以UYVY或Y422格式存储视频数据。 我需要能够生成和解码这些文件,我的解码工作正常,但是我的生成似乎使我的视频帧失真。 我面临的第一个问题是,尽管opencv具有将我的格式转换为RGB(或BGR)格式的转换代码cv2.COLOR_YUV2RGB_UYVY),但没有其他选择。

基于这个问题的答案here,我希望它会有点有损,但不会达到我所看到的程度。我设置了一个简单的循环来获取框架,并通过两次转换来回运行它,这使问题变得越来越复杂,而且越来越糟。

然后我对其进行了修改,以便将U和V值设置为128,以便只剩下未进行子采样的亮度通道,因此我预期不会降低质量,但是图像仍然会失真。

i = 0
while True:
    frame2 = cv2.cvtColor(frame,cv2.COLOR_RGB2YUV)
    frame3 = np.ndarray((frame.shape[0],frame.shape[1],2),dtype=np.uint8)
    # subsampling
    # copy all y channels
    frame3[:,:,1] = frame2[:,0]
    frame3[:,0] = 128
    frame = cv2.cvtColor(frame3,cv2.COLOR_YUV2RGB_UYVY)
    print(i)
    cv2.imshow('test',frame)
    cv2.waitKey(0)
    i += 1

其中的帧是要输入的RGB图像。

我尝试了其他转换代码,我注意到cv2.COLOR_RGB2YCrCb得到的结果与使我翻阅cpp代码相同,据我所知here,这是使用YCrCb转换对于YUV,但我希望它会使用自己的实现。

我觉得我必须缺少一些简单的东西,但我不知道是什么

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)