问题描述
- 关于yuv420数据读取的问题
-
目前,y数据可以成功读取出来,就是uv数据出问题。出现的图片有些纵向压缩一半,不知道怎么回事,我调试代码,感觉没有错哈!代码如下:pdata=ive_420_img->pu8VirAddr[1]; qdata=ive_444_img->pu8VirAddr[1]; for(HI_U16 i=0;i<ive_420_img->u16Height;i++) { for(HI_U16 j=0;j<ive_420_img->u16Stride[0];j++) { y_index=i*ive_420_img->u16Stride[0]+j; uv_index=(i>>1)*(ive_420_img->u16Stride[0]>>1)+(j>>1); qdata[y_index]=pdata[uv_index]; } }
上面代码的意思是,将YUV420转化为YUV444,其中pdata直接指向的是420的U数据(源数据),qdata指向的是444的U数据(目的数据)。我用opencv显示U分量数据,结果见下:
(对不起图像传不上去:纵向压缩:正确转化后的坐标为(x,y),但是目前却显示在了(x,y/2)的位置,图像的分辨率不变,其余部分是以灰色填充的。大家帮忙分析一下什么问题?
解决方案
YUV420 转YUV444 纵向每隔一行需要插值
解决方案二:
回复楼上,可以这样做么,怎么还是纵向压缩?
pdata=ive_420_img->pu8VirAddr[1];
qdata=ive_444_img->pu8VirAddr[1];
for(HI_U16 i=0;i<ive_420_img->u16Height;)
{
for(int k=0;k<2;k++)
{
for(HI_U16 j=0;j<ive_420_img->u16Stride[0];j++)
{
y_index=i*ive_420_img->u16Stride[0]+j;
uv_index=(i>>1)*(ive_420_img->u16Stride[0]>>1)+(j>>1);
qdata[y_index]=pdata[uv_index];
}
i++;//在这儿进行纵向插值(改变的地方)
}
}
解决方案三:
yuv420
时间: 2024-09-07 10:56:56