微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cv2 cvtColor YUV转换错误

如何解决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 举报,一经查实,本站将立刻删除。