# yuv转opencv中的IplImage

yuv三个分量分别写在3个矩阵下，然后合并之后转换为rgb分量的图片格式就可以了；

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

rgbimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3);
image = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3);

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

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

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

#define MR(Y,U,V) (Y + (1.403)*(V-128))
#define MG(Y,U,V) (Y - (0.344) * (U-128) - (0.714) * (V-128) )
#define MB(Y,U,V) (Y + ((1.773) * (U-128)))

yuv转rgb的函数：

void YUV420_C_RGB( char* pYUV, unsigned char* pRGB, int height, int width)
{
char* pY = pYUV;
char* pU = pYUV+height*width;
char* pV = pU+(height*width/4);

unsigned char* pBGR = NULL;
unsigned char R = 0;
unsigned char G = 0;
unsigned char B = 0;
char Y = 0;
char U = 0;
char V = 0;
double tmp = 0;
for ( int i = 0; i < height; ++i )
{
for ( int j = 0; j < width; ++j )
{
pBGR = pRGB+ i*width*3+j*3;

Y = *(pY+i*width+j);
U = *pU;
V = *pV;

//B
tmp = MB(Y, U, V);
//B = (tmp > 255) ? 255 : (char)tmp;
//B = (B<0) ? 0 : B;
B = (unsigned char)tmp;
//G
tmp = MG(Y, U, V);
//G = (tmp > 255) ? 255 : (char)tmp;
// G = (G<0) ? 0 : G;
G = (unsigned char)tmp;
//R
tmp = MR(Y, U, V);
//R = (tmp > 255) ? 255 : (char)tmp;
//R = (R<0) ? 0 : R;
R = (unsigned char)tmp;

*pBGR     = R;
*(pBGR+1) = G;
*(pBGR+2) = B;

if ( i%2 == 0 && j%2 == 0)
{
*pU++;
//*pV++;
}
else
{
if ( j%2 == 0 )
{
*pV++ ;
}
}
}

}
}

unsigned char* pRGB = NULL;

pRGB = (unsigned char*)malloc(nSize*sizeof(unsigned char*)*2);

YUV420_C_RGB(pBuf,pRGB,nWidth,nHeight);

IplImage *image;
cvSetData(image,pRGB,nWidth*3);

opencv2.0版本

• 本文已收录于以下专栏：

## 基于opencv RGB与YUV420的转换

• zhangla1220
• 2015年03月28日 21:06
• 7263

## YUV转为IplImage格式(I420和YV12)

http://www.haodaima.net/art/2662859 一、YUV简介     一般来说，直接采集到的视频数据是RGB24的格式，RGB24一帧的大小size=width×...
• feixuedudiao
• 2015年04月04日 15:37
• 3175

## YUV转IPLImage（RGB）

• leixiaohua1020
• 2013年09月20日 17:07
• 6753

## YUV420数据转为IplImage格式

1 YUV420理解     首先我们需要对YUV420的数据有一个了解，很多人对YUV数据格式不清楚，以至于在做视频的时候出现了一些不可预知的错误(比如说图像带有点、颜色不对等)。图文讲解， 在...
• DaveBobo
• 2016年04月11日 17:55
• 1036

## YUV格式转为IplImage

• 2014年05月17日 21:27
• 48.3MB
• 下载

## OpenCV读取YUV420p文件并转换为Mat类型

• luofl1992
• 2017年04月19日 11:08
• 2210

## opencv显示yuv420,YV12视频文件

#include #include #include #include #include #include #include #include "generalImgFun.hpp" #...
• luopeiyuan1990
• 2016年10月10日 17:12
• 2894

## OpenCV中 IplImage 与 Mat

• chinabinlang
• 2014年11月10日 16:27
• 12312

## opencv中的IplImage

• fenggaoyuehei
• 2010年11月28日 16:25
• 10928

## yuv转opencv中的IplImage

• DreamD1987
• 2012年02月14日 21:51
• 9482

举报原因： 您举报文章：yuv转opencv中的IplImage 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)