YUV的数据格式

一、YUV格式分为两大类:planar(平面)和packed(打包)。planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U,随后存储所有像素点的V。packed格式,每个像素点的Y、U、V分量是连续存储的。

二、YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。用三个图来直观地表示采集的方式,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。如下:

1、YUV 4:4:4采样,每一个Y对应一组UV分量。

2、YUV 4:2:2采样,每两个Y共用一组UV分量。

3、YUV 4:2:0采样,每四个Y共用一组UV分量。 

三、YUV各种存储格式

1、YUV420

(1)IYUV(I420)

IYUV(I420)是planar模式的YUV。

YUV420视频图像分量率的长为L,宽为W,则一帧YUV数据长度为L*W*3/2字节,一帧YUV数据中内存起始指针为P,Y数据的起始指针为P,U数据的起始指针为P+L*W,V数据的起始指针为P+L*W*5/4。

(2)YV12

YV12类似于IYUV(I420),只是U和V的顺序相反。

(3)NV12

NV12是two-planar模式的YUV。

(4)NV21

NV21类型与NV12,只是U和V的顺序相反。

 2、YUV444

YUV444视频图像分量率的长为L,宽为W,则一帧YUV数据长度为L*W*3字节,一帧YUV数据中内存起始指针为P,Y数据的起始指针为P,U数据的起始指针为P+L*W,V数据的起始指针为P+L*W*2。

参考:

http://www.fourcc.org/fourcc.php

http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将海思的YVU数据格式转换为YUV数据格式,你可以使用以下代码片段: ```cpp // 定义YVU数据格式的宽度和高度 int width = 640; // 图像宽度 int height = 480; // 图像高度 // 定义YVU数据格式中Y、V、U分量的起始地址 HI_U8* yData = buffer; // Y分量起始地址 HI_U8* vData = yData + width * height; // V分量起始地址 HI_U8* uData = vData + width * height / 4; // U分量起始地址 // 创建一个与输入图像大小相同的输出图像 cv::Mat yuvImage(height, width, CV_8UC3); // 将YVU数据格式转换为YUV数据格式 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int index = y * width + x; int uvIndex = y / 2 * width / 2 + x / 2; // 获取Y、U、V分量的值 unsigned char Y = yData[index]; unsigned char U = uData[uvIndex]; unsigned char V = vData[uvIndex]; // 计算YUV分量的位置 int yuvIndex = y * width * 3 + x * 3; // 将YUV分量存储到输出图像中 yuvImage.data[yuvIndex] = Y; yuvImage.data[yuvIndex + 1] = U; yuvImage.data[yuvIndex + 2] = V; } } ``` 在上述代码中,我们假设YVU数据格式为YVU420P,在内存中依次存储Y、V、U分量。我们首先根据图像的宽度和高度计算出Y、V、U分量的起始地址。然后,我们创建一个与输入图像大小相同的输出图像。接下来,我们使用双层循环遍历每个像素,从Y、V、U分量中获取对应的值,并将它们存储到输出图像的相应位置。 请注意,上述代码仅适用于YVU420P格式的图像,如果你的图像格式不同,需要根据实际情况进行调整。同时,上述代码中的图像处理是逐像素进行的,可能效率较低。如果需要更高效的处理方法,可以考虑使用OpenCV等库提供的相关函数或者使用并行计算技术进行加速。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值