yuv4:2:0 转成 IplImage

以下代码今天早上我刚验证好,提供给诸君分享。

void copy_yuvImage_to_IplImage_color(const unsigned char *input_img,IplImage* out_img)
{
 IplImage *image,*yimg,*uimg,*vimg,*uuimg,*vvimg;
 unsigned char *ptr_yimg,*ptr_uimg,*ptr_vimg;
 int col,row;

 int test1;
 CvSize frameSize = {WIDTH,HIGHT};
 CvSize frameSize_q = {WIDTH/2,HIGHT/2};
 image = cvCreateImage(frameSize,IPL_DEPTH_8U,3); 
 yimg = cvCreateImage(frameSize,IPL_DEPTH_8U,1); 
 uimg = cvCreateImage(frameSize_q,IPL_DEPTH_8U,1); 
 vimg = cvCreateImage(frameSize_q,IPL_DEPTH_8U,1); 

 uuimg = cvCreateImage(frameSize,IPL_DEPTH_8U,1); 
 vvimg = cvCreateImage(frameSize,IPL_DEPTH_8U,1); 

 for(row=0;row<HIGHT;row++)
 {
  ptr_yimg = (unsigned char*)(yimg->imageData + row*yimg->widthStep);

  for(col=0;col<WIDTH;col++)
  {
   *ptr_yimg++ = input_img[row*WIDTH+col];
  }
 }
 for(row=0;row<HIGHT/2;row++)
 {
  ptr_uimg = (unsigned char*)(uimg->imageData + row*uimg->widthStep);
  ptr_vimg = (unsigned char*)(vimg->imageData + row*vimg->widthStep);

  for(col=0;col<WIDTH/2;col++)
  {
   *ptr_uimg++ = input_img[HIGHT*WIDTH + row*WIDTH/2 + col];
   *ptr_vimg++ = input_img[(HIGHT*WIDTH+HIGHT*WIDTH/4) + row*WIDTH/2 + col ];

  }
 }
 cvResize(uimg,uuimg,CV_INTER_LINEAR); 
 cvResize(vimg,vvimg,CV_INTER_LINEAR); 

 cvMerge(yimg,uuimg,vvimg,NULL,image); 
 cvCvtColor(image,out_img,CV_YCrCb2BGR);

 cvReleaseImage(&image);
 cvReleaseImage(&yimg);
 cvReleaseImage(&vimg);
 cvReleaseImage(&uimg);
 cvReleaseImage(&uuimg);
 cvReleaseImage(&vvimg);


}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值