opencv學習之圖像顏色空間轉換

#include<_highgui.h>
#include<cv.h>
#include<cxcore.h>
#include<iostream>
int main( int argc , char* argv[])
{
IplImage* src = cvLoadImage ( "F:\\bb1.jpg");
IplImage* src_float = cvCreateImage ( cvGetSize( src) , IPL_DEPTH_32F , 3);


cvConvertScale ( src , src_float , 1 ,0);//將8位的char型轉換爲32位的float型;


IplImage* img_hsv = cvCreateImage ( cvGetSize( src) , IPL_DEPTH_32F , 3);
IplImage* img_h = cvCreateImage ( cvGetSize( src) , IPL_DEPTH_32F , 1);
IplImage* img_s = cvCreateImage ( cvGetSize( src) , IPL_DEPTH_32F , 1);
IplImage* img_v = cvCreateImage ( cvGetSize( src) , IPL_DEPTH_32F , 1);

cvCvtColor( src_float , img_hsv , CV_BGR2HSV);
cvSplit ( img_hsv , img_h , img_s , img_v , NULL);//將img_hsv分解
IplImage* hsv = cvCreateImage ( cvGetSize( src) , 8 , 3);
IplImage* h = cvCreateImage ( cvGetSize( src) , 8 , 1);
IplImage* s = cvCreateImage ( cvGetSize( src) , 8 , 1);
IplImage* v = cvCreateImage ( cvGetSize( src) , 8 , 1);


//這三幅圖像不能用cvSaveImage保存,因爲是32位,必須轉化爲8位的char型;
cvConvertScale ( img_h , h , ( 1.0/360.0)*255.0 , 0 );//img_h的取值範圍是360,所以應化爲255;
cvConvertScale ( img_s, s , 255, 0 );//img_s的取值範圍是0-1,所以應乘以255將範圍化爲0-255;
cvConvertScale ( img_v , v , 1 , 0 );//img_v的取值範圍是0-255,所以應乘以1將範圍化爲0-255;


cvMerge ( h ,s ,v , NULL , hsv);//將h ,s ,v三幅圖像合成一幅

cvNamedWindow ( "src");
cvShowImage ( "src" , src);
cvNamedWindow ( "hsv");
cvShowImage ( "hsv" , hsv);
cvWaitKey(0);
return 0 ;


}
發佈了8 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章