颜色空间转换

          话不多说,代码说明anything

 

 

#include<opencv2/opencv.hpp>

#include <iostream>

using namespace std;
using namespace cv;


int main(int argc, char* argv[])
 
{
 
        //加载图像
 
        IplImage* src = cvLoadImage("e:\\kankan\\baihe.jpg");
 
        
   /*//一般情况下 BGR2HSV 当使用的8位的图像时,转换后 H通道的取值范围是[0,180]
 
        IplImage* hsv = cvCreateImage(cvGetSize(src),8,3);
 
        IplImage* imgH = cvCreateImage(cvGetSize(src), 8 ,1);
 
        IplImage* imgS = cvCreateImage(cvGetSize(src), 8 ,  1);
 
        IplImage* imgV = cvCreateImage(cvGetSize(src), 8 ,1);
 
        cvCvtColor(src,hsv , CV_BGR2HSV);
 
        */
 

        //先将图像转换成float型的  此时 进行颜色空间转换后 H通道的取值范围才是[0,360]
 
        IplImage* floatsrc =  cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
 
        IplImage* floathsv = cvCreateImage(cvGetSize(src),IPL_DEPTH_32F,3);
 
        IplImage* floatimgH = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F ,1);
 
        IplImage* floatimgS = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F ,  1);
 
        IplImage* floatimgV = cvCreateImage(cvGetSize(src), IPL_DEPTH_32F ,1);
 

        //将src从8位 转换到 32位的float型
 
        cvConvertScale(src,floatsrc);
 

        //将float型图像 从BGR转换到HSV  如果需要转换到其他的颜色空间 那么改变CV_BGR2HSV即可
 
        cvCvtColor(floatsrc,floathsv , CV_BGR2HSV);
 

        //将三通道图像 分解成3个单通道图像
 
        cvSplit(floathsv , floatimgH, floatimgS,floatimgV ,NULL);
 

        //测试H通道的取值范围
 
        int y, x;
 
        for( y=0;y<floatimgH->height;y++)
 
        {
 
                for( x =0 ;x<floatimgH->width;x++)
 
                {
 
                        //获取单通道图像在(x,y)的值
 
                        float value = cvGetReal2D(floatimgH , y ,x);
 
                
                        //测试H通道有没有大于180
 
                        if(value>180)
 
                        {
 
                                printf(" %f  " , value);                        
                        }
 

                }
 
                printf("\n");
 
        }
 

        //释放相应的图像内存空间
 
        cvReleaseImage(&src);
 
        cvReleaseImage(&floatsrc);
 
        cvReleaseImage(&floathsv);
 
        cvReleaseImage(&floatimgH);
 
        cvReleaseImage(&floatimgS);
 
        cvReleaseImage(&floatimgV);
 

        return 0;
 
}


 

你可能感兴趣的:(颜色空间转换)