opencv自帶cvcvtcolor,但是這種方法有bug,得到的會泛白。第二種方法是公式法。
法一:opencv自帶cvcvtcolor
說明:這種方法會出現「泛白」,具體原因網上是說cvcvtcolor這個函式左右協議不同,不太懂。
**:[cpp]view plain
copy
?void
filewriteframes()
} readme.close();
cvreleaseimage(&uuimg);
cvreleaseimage(&vvimg);
cvreleaseimageheader(&yimg);
cvreleaseimageheader(&uimg);
cvreleaseimageheader(&vimg);
cvreleaseimage(&image);
cvdestroywindow("yuv"
);
}
法二:公式法
**:[cpp]view plain
copy
?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,每個顏色...