YUV格式轉換為RGB(基於opencv)

2021-06-21 13:25:19 字數 2123 閱讀 6220

opencv自帶cvcvtcolor,但是這種方法有bug,得到的會泛白。第二種方法是公式法。

法一:opencv自帶cvcvtcolor

**:

void filewriteframes()

} readme.close();

cvreleaseimage(&uuimg);

cvreleaseimage(&vvimg);

cvreleaseimageheader(&yimg);

cvreleaseimageheader(&uimg);

cvreleaseimageheader(&vimg);

cvreleaseimage(&image);

cvdestroywindow("yuv");

}

法二:公式法

**:

bool yuv420_to_bgr24(unsigned char *puc_y, unsigned char *puc_u, unsigned char *puc_v, unsigned char *puc_rgb, int width_y, int height_y)

//初始化變數

int basesize = width_y * height_y;

int rgbsize = basesize * 3;

byte* rgbdata = new byte[rgbsize];

memset(rgbdata, 0, rgbsize);

/* 變數宣告 */

int temp = 0;

byte* rdata = rgbdata; //r分量位址

byte* gdata = rgbdata + basesize; //g分量位址

byte* bdata = gdata + basesize; //b分量位址

int uvindex =0, yindex =0;

//yuv->rgb 的轉換矩陣

//double yuv2rgb[3][3] = ;

for(int y=0; y < height_y; y++)

}//將r,g,b三個分量賦給img_data

int widthstep = width_y*3;

for (int y = 0; y < height_y; y++)

}if (!puc_rgb)

delete rgbdata;

return true;

}iplimage* yuv420_to_iplimage(unsigned char* pyuv420, int width, int height)

//初始化變數

int basesize = width*height;

int imgsize = basesize*3;

byte* prgb24 = new byte[imgsize];

memset(prgb24, 0, imgsize);

/* 變數宣告 */

int temp = 0;

byte* ydata = pyuv420; //y分量位址

byte* udata = pyuv420 + basesize; //u分量位址

byte* vdata = udata + (basesize>>2); //v分量位址

if(yuv420_to_bgr24(ydata, udata, vdata, prgb24, width, height) == false || !prgb24)

iplimage *image = cvcreateimage(cvsize(width, height), 8,3);

memcpy(image->imagedata, prgb24, imgsize);

if (!image)

delete prgb24;

return image;

}void filewriteframes()

} readme.close();

}

完整**見:

參見blog:

YUV格式轉換為RGB(基於opencv)

opencv自帶cvcvtcolor,但是這種方法有bug,得到的會泛白。第二種方法是公式法。法一 opencv自帶cvcvtcolor 說明 這種方法會出現 泛白 具體原因網上是說cvcvtcolor這個函式左右協議不同,不太懂。cpp view plain copy print void fil...

YUV格式到RGB格式的轉換

yuyv格式到rgb格式的轉換 yuyv格式如下 y0u0y1v0 y2u1y3v1.說明 乙個y代表乙個畫素,而乙個y和uv組合起來構成乙個畫素,所以第0個畫素y0和第乙個畫素y1都是共用第0個畫素的u0和v0。而每個分量y,u,v都是占用乙個位元組的儲存空間。所以y0u0y1v0相當於兩個畫素,...

RGB與YUV格式 四

一 rgb rgb24一幀的大小size width heigth 3 byte,rgb32的size width heigth 4byte.1.rgb為紅綠藍三原色 yuv,rgb是色彩空間模型,而bmp,png,jpeg,gif是影象的檔案儲存格式。影象的每個畫素的三個分量為r g b,每個顏色...