No.5 YUV420 格式图像旋转

概述

分别在 CPU 上使用 C 语言和在 GPU 上使用 OpenCL 对一张 YUV420p 的图像顺时针旋转 90 度,比较两者之间的性能差异。GPU 使用了 Mali T-880 和 AMD RX 460 作对比。完整代码参见 No.1_OpenCLRotate,Ubuntu 系统环境下完整代码参见No.2_OpenCLRotate

简介

YUV 和我们熟知的 RGB 类似,是一种颜色编码格式。它主要用于电视系统和模拟视频邻域(如 Camera 系统)。YUV 包含三个分量,其中 Y 表示明亮度(Luminance 或 Luma),也就是灰度值。而 UV 则表示色度(Chrominance 或 Chroma),作用是描述图像色彩及饱和度,用于指定像素的颜色。没有 UV 分量信息,一样可以显示完整的图像,只不过是黑白的灰度图像。YUV 格式的好处是很好地解决了彩色电视机与黑白电视机的兼容问题。而且 YUV 不像 RGB 那样要求三个独立的视频信号同时传输,所以用 YUV 方式传送占用极少的频宽。

YUV 格式包含两大类,分别为 planar 和 packed:

  • 对于 planar 格式,先连续存储所有像素点的 Y 分量,紧接着存储所有像素点的 U 分量,最后是所有像素点的 V 分量;
  • 对于 packed 格式,和 planar 格式一样,也是先连续存储所有像素点的 Y 分量,紧接着存储所有像素点的 UV 分量。不同的是,UV 分量是交替存放的。

在 YUV420 中,一个像素点对应一个 Y 分量,一个 2x2 的小方块对应一个 U 和 V,上面两种格式的 Y 值在排列是完全相同的(只有 Y 的图像就是灰度图像)。YUV420p 与 YUV420sp 的数据格式在 UV 的排列上不同,420p 它是先存放完 U 分量,再存放 V 放量,也就是说他们的 UV 分量是连续的。而 420sp 它的 UV 分量是按照 UV、UV…… 这样交替存放的。

假设原始图像的宽度和高度分别使用 w 和 h 表示,旋转前的图像尺寸是 w x h,旋转后的图像尺寸是 h x w,旋转前后图像大小保持不变。对于 YUV420p 数据格式,其数据在内存中安排如下:

  • 图像占用的内存空间大小: w * h * 3 / 2;
  • Y 分量占用的内存大小为 w * h,从内存起始位置开始存放;
  • Y 分量中每个 2x2 的小方块对应一个 U 和 V;
  • U 分量大小为 (w/2)*(h/2),存放的位置从图像的 w * h 偏移位置开始;
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值