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

2021-07-27 09:44:59 字數 2634 閱讀 4491

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

法一:opencv自帶cvcvtcolor

說明:這種方法會出現「泛白」,具體原因網上是說cvcvtcolor這個函式左右協議不同,不太懂。

**:[cpp]view plain

copy

print

?void

filewriteframes()  

}  readme.close();  

cvreleaseimage(&uuimg);  

cvreleaseimage(&vvimg);  

cvreleaseimageheader(&yimg);  

cvreleaseimageheader(&uimg);  

cvreleaseimageheader(&vimg);  

cvreleaseimage(&image);  

cvdestroywindow("yuv"

);   

}  

法二:公式法

**:[cpp]view plain

copy

print

?bool

yuv420_to_bgr24(unsigned 

char

*puc_y, unsigned 

char

*puc_u, unsigned 

char

*puc_v, unsigned 

char

*puc_rgb, 

intwidth_y, 

intheight_y)  

//初始化變數

intbasesize = width_y * height_y;  

intrgbsize = basesize * 3;  

byte

* rgbdata  = 

newbyte

[rgbsize];  

memset(rgbdata, 0, rgbsize);  

/* 變數宣告 */

inttemp = 0;  

byte

* rdata = rgbdata;                  

//r分量位址

byte

* gdata = rgbdata + basesize;       

//g分量位址

byte

* bdata = gdata   + basesize;       

//b分量位址

intuvindex =0, yindex =0;  

//yuv->rgb 的轉換矩陣

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

for(

inty=0; y 

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

intwidthstep = width_y*3;  

for(

inty = 0; y 

}  if(!puc_rgb)  

delete

rgbdata;  

return

true

;  }  

iplimage* yuv420_to_iplimage(unsigned char

* pyuv420, 

intwidth, 

intheight)  

//初始化變數

intbasesize = width*height;  

intimgsize = basesize*3;  

byte

* prgb24  = 

newbyte

[imgsize];  

memset(prgb24,  0, imgsize);  

/* 變數宣告 */

inttemp = 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 void filewriteframes readme.close cvreleaseimage uuimg cvreleaseimage vvimg cvrel...

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,每個顏色...