概況
cvCvtColor(...),是Opencv里的顏色空間轉換函式,可以實現RGB顏色向HSV,HSI等顏色空間的轉換,也可以轉換為灰度圖像。
參數CV_RGB2GRAY是RGB到gray。
參數 CV_GRAY2RGB是gray到RGB。處理結果是彩色的,則轉灰色就是了。
函式參數說明
void cvCvtColor( const CvArr* src, CvArr* dst, int code );
src
輸入的 8-bit,16-bit或 32-bit單倍精度浮點數影像。
dst
輸出的8-bit, 16-bit或 32-bit單倍精度浮點數影像。
code
色彩空間轉換的模式,該code來實現不同類型的顏色空間轉換。比如CV_BGR2GRAY表示轉換為灰度圖,CV_BGR2HSV將圖片從RGB空間轉換為HSV空間。其中當code選用CV_BGR2GRAY時,dst需要是單通道圖片。當code選用CV_BGR2HSV時,對於8點陣圖,需要將RGB值歸一化到0-1之間。這樣得到HSV圖中的H範圍才是0-360,S和V的範圍是0-1。
函式使用範例
這裡給出將RGB圖像轉換為灰度和HSV的例子:
IplImage *src = cvLoadImage("4085_1.jpg",1);//原圖
IplImage *dst_gray = cvCreateImage(cvGetSize(src),src->depth,1);//灰度圖
IplImage *dst_image = cvCreateImage(cvGetSize(src),32,src->nChannels);
IplImage *src_image_32 = cvCreateImage(cvGetSize(src),32,src->nChannels);
//這兩個圖需要是32浮點位的,因為對原圖進行歸一化後得到的是浮點數
cvCvtColor(src,dst_gray,CV_BGR2GRAY);//得到灰度圖
cvConvertScale(src,src_image_32,1.0/255.0,0);//將原圖RGB歸一化到0-1之間
cvCvtColor(src_image_32,dst_image,CV_BGR2HSV);//得到HSV圖