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 yuv444
    

    yuv444不够的uv要从nv12的uv上重复采样。

参考:

http://paulbourke.net/dataformats/nv12/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部