项目系统中的YUV数据显示 图简单用了Opencv 但要转换成IplImage数据

用OpenCV直接create一个窗口,显示图像数据。

其中需要注意的是:

1、Opencv库一般应用的是unsigned char* ,而项目中的是long * 数据,只需强制转换一下就可以了,这里还是地址存储数据的问题。

2、YUV有多种格式,这里是YUV420 具体参考上篇文章。 cvCvtColor(yuvimage,rgbimg,CV_YCrCb2RGB);

 

IplImage* YUV420_To_IplImage_Opencv(unsigned char* pYUV420, int width, int height)
{
 if (!pYUV420)
 {
  return NULL;
 }

 IplImage *yuvimage,*rgbimg,*yimg,*uimg,*vimg,*uuimg,*vvimg;

 int nWidth = width;
 int nHeight = height;
 rgbimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3);
 yuvimage = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3);
 yimg = cvCreateImageHeader(cvSize(nWidth, nHeight),IPL_DEPTH_8U,1);
 uimg = cvCreateImageHeader(cvSize(nWidth/2, nHeight/2),IPL_DEPTH_8U,1);
 vimg = cvCreateImageHeader(cvSize(nWidth/2, nHeight/2),IPL_DEPTH_8U,1);

 uuimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,1);
 vvimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,1);

 cvSetData(yimg,pYUV420, nWidth);
 cvSetData(uimg,pYUV420+nWidth*nHeight, nWidth/2);
 cvSetData(vimg,pYUV420+long(nWidth*nHeight*1.25), nWidth/2);
 cvResize(uimg,uuimg,CV_INTER_LINEAR);
 cvResize(vimg,vvimg,CV_INTER_LINEAR);

 cvMerge(yimg,uuimg,vvimg,NULL,yuvimage);
 cvCvtColor(yuvimage,rgbimg,CV_YCrCb2RGB);

 cvReleaseImage(&uuimg);
 cvReleaseImage(&vvimg);
 cvReleaseImageHeader(&yimg);
 cvReleaseImageHeader(&uimg);
 cvReleaseImageHeader(&vimg);
 cvReleaseImage(&yuvimage);
 if (!rgbimg)
 {
  return NULL;
 }
 return rgbimg;
}


main()
{
 IplImage * iplimg = YUV420_To_IplImage_Opencv( (unsigned char*)pTDFrame, 1280, 720);
     

 //取到的帧,进行算法处理
 //CString strChannID = GetMPID().c_str();
 /*int num=GTProcessFrame(0, (unsigned char *)pTDFrame, GT_LIGHTING_AUTO, GT_MIN_VEHICLE_SN, pFDChann->pVehicleInfos);
 if (num > 0)
 {
  int result = 1;
 }*/

 cvShowImage("tracker",iplimg);
 if(cvWaitKey(10)>=0)
  break;

 cvReleaseImage(&iplimg);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值