#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 ;
}
#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 ;
}