问题描述
我正在尝试使用笨拙的视频格式,以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 (将#修改为@)