I420转RGB24

现在网上这些人写的要么不对 要么颜色溢出 要么偏黄 偏蓝  偏红 。真的是够了。

 

试一试下面就知道对不对了。

I420也叫IYUV,也叫YUV420 。 采集卡采集视屏数据通常为I420 经过转换成rgb24后 可以对图像进行各种处理。

 

下面来说说i420转rgb24:

 

   unsigned char*  I420ToRGBA(const  unsigned char * src, int width, int height)
  {
   
    //我的图片是1920*1080的  你们按照自己*3就可以
      unsigned char* rgbA = new unsigned char[1920*1080*3];
      int temp = 0;
            for(int i=0; i<height; i++){  
            int startY = i*width;   
            int step = (i/2)*(width/2);  
            int startV = positionOfV + step;  
            int startU = positionOfU + step;  


            for(int j = 0; j < width; j++){  
                int Y = startY + j;  
                int V = startV + j/2; 
                int U = startU + j/2;
                int index = Y*3;   

                temp = ((src[Y]&0xff) + 1.4075 * ((src[V]&0xff)-128));  
                rgbA[index+B] = temp<0 ? 0 : (temp > 255 ? 255 : temp);

                temp =  ((src[Y]&0xff) -  0.3455* ((src[U]&0xff)-128) - 0.7169*((src[V]&0xff)-128));
                rgbA[index+G] =   temp<0 ? 0 : (temp > 255 ? 255 : temp);

               temp =  ((src[Y]&0xff) +  1.779* ((src[U]&0xff)-128));  
                rgbA[index+R] =temp<0 ? 0 : (temp > 255 ? 255 : temp);
            }  
        }  

        return rgbA;  
  }

 

使用方法:

int main(void)

{

   

   // 参数1. 待转换的I420数据 ,参数二 图片宽度 ,参数三 图片的高度 ,返回值 :指向转换后的数据 也就是指向rgb24数据

   unsigned char* rgb24 =   I420ToRGBA(i420,1920,1080);

   delete[] rgb24;

  rgb24 = nullptr;

   return 0; 

}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值