将YUV420P图像水平镜像翻转——音视频(一)

YUV格式

将YUV420P图像水平镜像翻转——音视频(一)

 

Y:明亮度  UV:色彩及饱和度

YUV420即4个Y对应一组UV

YUV420P的存储

YUV 420P 和 YUV 420SP 都是基于 Planar 平面格式 进行存储的,先存储所有的 Y 分量后, YUV420P 类型就会先存储所有的 U 分量或者 V 分量,而 YUV420SP 则是按照 UV 或者 VU 的交替顺序进行存储

 

 YUV420P 的格式:

将YUV420P图像水平镜像翻转——音视频(一)

其在码流中的表现形式为:

将YUV420P图像水平镜像翻转——音视频(一)

旋转YUV420P的图像

 1 void SdlQtRGB::yuvMirror(unsigned char* yuv, int w, int h)
 2 {
 3     int i;
 4     int a, b;
 5 
 6     for (i = 0; i < h; i++)
 7     {
 8         a = i * w;
 9         b = (i + 1) * w - 1;
10         while (a < b)
11         {
12             _swap(yuv[a], yuv[b]);
13             a++; b--;
14         }
15     }
16 
17     int uStartPos = w * h; 
18     for (i = 0; i < h / 2; i++)
19     {
20         a = i * w / 2;
21         b = (i + 1) * w / 2 - 1;
22         while (a < b)
23         {
24             _swap(yuv[a+ uStartPos], yuv[b+ uStartPos]);
25             a++; b--;
26         }
27     }
28 
29     int vStartPos = w * h / 4 * 5;
30     for (i = 0; i < h / 2; i++)
31     {
32         a = i * w / 2;
33         b = (i + 1) * w / 2 - 1;
34         while (a < b)
35         {
36             _swap(yuv[a+ vStartPos], yuv[b+ vStartPos]);
37             a++; b--;
38         }
39     }
40 
41 }
1 void _swap(unsigned char& a, unsigned char& b)
2 {
3   a ^= b;
4   b ^= a;
5   a ^= b;
6 }

效果:

将YUV420P图像水平镜像翻转——音视频(一)

 

 参考链接:

音视频编解码: YUV存储格式中的YUV420P,YUV420SP,NV12, NV21理解(转) 

yuv图片旋转180度,镜像水平翻转

 

上一篇:tf2分布式训练及SRGNN提高指标的实践


下一篇:脉冲信号转电平信号(如何展宽一个信号,跨时钟域中快时域到慢时域)