示例代码
#pragma comment(lib,"cxcore.lib") #pragma comment(lib,"cv.lib") #pragma comment(lib,"highgui.lib") #pragma comment(lib,"ml.lib") #pragma comment(lib,"cvcam.lib") #pragma comment(lib,"cvaux.lib") #include <stdio.h> #include <iostream> #include <cv.h> #include <cxcore.h> #include <highgui.h> using namespace std; void show(IplImage* img) { for (int y=0;y<img->height;y++) { for (int x=0;x<img->width;x++) { float value=cvGetReal2D(img,y,x); // if(value > 350 ) printf("%f ",value); } //printf("\n"); } } int main() { IplImage* src=cvLoadImage("img//sub.jpg"); //1 RGB 转化为 HSV------------------------------------------------------------ IplImage* src_float=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3); cvConvertScale(src,src_float,1.0,0);// 数值表示 8位(0-255)(RGB) -- 转化为 32 位浮点型,因子不变,偏移不变 IplImage* hsv=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3); IplImage* h=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1);//一般情况下 BGR2HSV 当使用的8位的图像时,转换后 H通道的取值范围是[0,180] IplImage* s=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1); IplImage* v=cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,1); cvCvtColor(src_float,hsv,CV_BGR2HSV);//转化 需要类型一样 cvSplit(hsv,h,s,v,NULL);// //show(h);//色彩 0-360 //show(s);//饱和度 0 - 1.0 //show(v);//亮度 0 - 255 //2 RGB 转化为 HSV----------------------------------------------------------------------- //保存 HSV 图像---必须转化8位的RGB类型 才能够保存 IplImage* _hsv=cvCreateImage(cvGetSize(src),8,3); IplImage* _h=cvCreateImage(cvGetSize(src),8,1);//一般情况下 BGR2HSV 当使用的8位的图像时,转换后 H通道的取值范围是[0,180] IplImage* _s=cvCreateImage(cvGetSize(src),8,1); IplImage* _v=cvCreateImage(cvGetSize(src),8,1); cvConvertScale(h,_h,(1/360.0)*255,0);//h通道 0- 360 转化为 0-255 cvConvertScale(s,_s,255.0,0);//S 0--1 因子设置为255 cvConvertScale(v,_v,1,0);//0-255 保持不变 cvMerge(_h,_s,_v,NULL,_hsv);//合并通道 cvNamedWindow("_hsv"); cvShowImage("_hsv",_hsv); ///---------------------------------------- cvNamedWindow("src"); cvShowImage("src",src); //直接用函数转换------------ IplImage* rgb=cvCreateImage(cvGetSize(src_float),8,3); cvConvertScale(src_float,rgb,1.0,0); cvNamedWindow("rgb"); cvShowImage("rgb",rgb); cvWaitKey(0); return 0; }