关于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++;//在这儿进行纵向插值(改变的地方)
            }
        }