nv12, yuv420, yuv444转换关系
nv12, yuv420, yuv444转换关系
对于宽高为(w,h)的图像
-
yuv444
yuv444的排列顺序:[y, y, y, y, …, y, u, u,u,u,…u, v,v,v,v,…v], shape:(h, w, 3).
乘以一个3*3矩阵可以转换为RGB, opencv已经提供了这种函数:cv2.cvtColor(yuv444, cv2.COLORYUV2RGB). -
yuv420
排列顺序: [y, y, y, y, …, y, u, u, u, …u, v, v, v, …, v], shape:(h*3/2, w),
其中前[:h, :]为y, [h : h * 3/2, :]为u和v,先u,再v. cvtColor转换flag:cv2.COLORYUV2RGB_I420. -
nv12
排列顺序:[y,y,y,y,…,y, u,v,u,v,…], shape和yuv420一样:(h*3/2, w),
前[:h, :]为y, 剩下部分u,v间隔排列。与yuv420唯一区别是uv顺序, cv2.COLORYUV2RGB_NV12.nv12toyuv转换方式:
def convert_nv12_to_yuv444_naive(width, height, nv12_data):yuv444 = np.zeros((height, width, 3), nv12_data.dtype)yuv444[:, :, 0] = nv12_data[:width * height].reshape(height, width)uv_start = width * heightimport mathfor j in range(height):for i in range(width):uv_idx = uv_start + (width * math.floor(j / 2)) + (math.floor(i / 2))*2u = nv12_data[uv_idx]v = nv12_data[uv_idx+1]yuv444[j, i , 1:] = u, vreturn yuv444yuv444不够的uv要从nv12的uv上重复采样。
参考:
http://paulbourke.net/dataformats/nv12/
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
