PIXEL_FORMAT_YVU_SEMIPLANAR_420的内存排列结构
时间: 2023-08-04 20:05:15 浏览: 292
PIXEL_FORMAT_YVU_SEMIPLANAR_420是一种常见的图像格式,其内存排列结构如下:
首先,将图像的Y(亮度)分量按照平面存储,紧接着是V(色度)和U(色度)分量按交错方式交替存储。
具体来说,假设图像的宽度为W,高度为H,那么内存中的存储顺序如下:
- Y分量平面:总共有W * H个像素,按照行优先的顺序存储。
- VU分量交错:总共有W * H / 2个像素,每个像素由一个V值和一个U值组成,按照以下方式交替存储:VUVUVU...
所以,内存中的排列结构类似于:YYYY...VUVUVU...
需要注意的是,YVU_SEMIPLANAR_420格式中的VU分量是按照1:2的采样比例进行降采样的,即每4个Y像素共用一个VU像素。因此,VU分量的尺寸是Y分量尺寸的一半。
相关问题
td_s32 ret; ot_vpss_grp_attr grp_attr = { 0 }; ot_vpss_chn_attr chn_attr[OT_VPSS_MAX_PHYS_CHN_NUM] = { 0 }; td_bool chn_enable[OT_VPSS_MAX_PHYS_CHN_NUM] = { 0 }; if (vpss_chn >= OT_VPSS_MAX_PHYS_CHN_NUM) { sample_print("vpss_chn:%d invalid!\n", vpss_chn); return TD_FAILURE; } grp_attr.nr_en = TD_TRUE; grp_attr.ie_en = TD_TRUE; grp_attr.dci_en = TD_TRUE; grp_attr.nr_attr.compress_mode = OT_COMPRESS_MODE_FRAME; grp_attr.dei_mode = OT_VPSS_DEI_MODE_OFF; grp_attr.pixel_format = SAMPLE_PIXEL_FORMAT; grp_attr.frame_rate.src_frame_rate = -1; grp_attr.frame_rate.dst_frame_rate = -1; grp_attr.max_width = size->width; grp_attr.max_height = size->height; chn_enable[vpss_chn] = TD_TRUE; chn_attr[vpss_chn].chn_mode = OT_VPSS_CHN_MODE_AUTO; chn_attr[vpss_chn].width = size->width; chn_attr[vpss_chn].height = size->height; chn_attr[vpss_chn].pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420; chn_attr[vpss_chn].frame_rate.src_frame_rate = -1; chn_attr[vpss_chn].frame_rate.dst_frame_rate = -1; chn_attr[vpss_chn].border_en = TD_TRUE; chn_attr[vpss_chn].border_attr.color = COLOR_RGB_BLUE; chn_attr[vpss_chn].border_attr.top_width = 2; /* 2 : border top width */ chn_attr[vpss_chn].border_attr.bottom_width = 2; /* 2 : border bottom width */ chn_attr[vpss_chn].border_attr.left_width = 2; /* 2 : border left width */ chn_attr[vpss_chn].border_attr.right_width = 2; /* 2 : border right width */ ret = sample_common_vpss_start(vpss_grp, chn_enable, &grp_attr, chn_attr, OT_VPSS_MAX_PHYS_CHN_NUM); if (ret != TD_SUCCESS) { sample_print("failed with %#x!\n", ret); return TD_FAILURE; } return TD_SUCCESS;
这段代码是关于视频处理的,主要是配置了一个 VPSS 组和一个 VPSS 通道。VPSS(Video Processing Subsystem)是专门用于视频处理的子系统,可以对视频进行降噪、锐化、缩放、颜色调整等操作。这里的代码中,首先判断了要配置的 VPSS 通道是否有效,然后设置了 VPSS 组和通道的属性,包括使能 NR(Noise Reduction)和 IE(Image Enhancement)等功能,压缩模式为帧压缩,DEI(Dynamic Edge Interpolation)模式为关闭,像素格式为 SAMPLE_PIXEL_FORMAT,帧率为 -1 不限制帧率,宽高为传入参数 size 的宽高,最后设置了边框的颜色和宽度,并启动了 VPSS 组和通道。
opencv将HI_U8*buffer=(HI_U8*) HI_MPI_SYS_Mmap( frameinfo.stVFrame.u64PhyAddr[0], w*h*YVU420P_PIXEL_SIZE );的yvu数据转yuv数据格式
要将YVU数据格式转换为YUV数据格式,你可以使用OpenCV的cv::cvtColor函数。首先,你需要将HI_U8类型的buffer转换为cv::Mat类型的图像。然后,使用cv::cvtColor函数将图像从YVU颜色空间转换为YUV颜色空间。
以下是一个示例代码片段:
```cpp
// 将HI_U8类型的buffer转换为cv::Mat类型的图像
cv::Mat yvuImage(h, w, CV_8UC1, buffer);
// 创建一个与输入图像大小相同的输出图像
cv::Mat yuvImage(h, w, CV_8UC3);
// 将图像从YVU颜色空间转换为YUV颜色空间
cv::cvtColor(yvuImage, yuvImage, cv::COLOR_YUV2BGR_I420);
```
在上述代码中,我们首先将HI_U8类型的buffer转换为cv::Mat类型的yvuImage。然后,我们创建了一个与输入图像大小相同的yuvImage作为输出图像。最后,我们使用cv::cvtColor函数将yvuImage从YVU颜色空间转换为YUV颜色空间,并将结果存储在yuvImage中。
注意:在上述示例中,我们假设输入的yvuImage是YVU420P格式,输出的yuvImage是YUV格式。你可以根据实际情况调整cv::cvtColor函数的参数。
阅读全文