歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OpenCV中 RGB 轉換到 HSI空間

本文實現了RGB空間轉換到HSI空間,並分別求出S分量(飽和度)、I分量(亮度、光強)

  1. #include "stdafx.h"   
  2. #include "highgui.h"   
  3. #include"cv.h"   
  4.   
  5. int main(int argc, char *argv[])  
  6. {   
  7.  IplImage *img = cvLoadImage("G:\\huo.jpg");  
  8.   
  9.  IplImage *r  = cvCreateImage( cvGetSize(img), img->depth, 1);  
  10.  IplImage *g  = cvCreateImage( cvGetSize(img), img->depth, 1);  
  11.  IplImage *b  = cvCreateImage( cvGetSize(img), img->depth, 1);  
  12.   
  13.   
  14.  CvMat *rmat = cvCreateMat( img->height, img->width, CV_32FC1);  
  15.  CvMat *gmat = cvCreateMat( img->height, img->width, CV_32FC1);  
  16.  CvMat *bmat = cvCreateMat( img->height, img->width, CV_32FC1);  
  17.  CvMat *temp1 = cvCreateMat( img->height, img->width, CV_32FC1);  
  18.  CvMat *temp2 = cvCreateMat( img->height, img->width, CV_32FC1);  
  19.  CvMat *temp3 = cvCreateMat( img->height, img->width, CV_32FC1);  
  20.   
  21.  cvNamedWindow("saturation", 1);  
  22.  cvNamedWindow("intensity", 1);  
  23.  cvSplit( img, b, g, r, NULL);  
  24.  cvConvert(b, bmat);  
  25.  cvConvert(g, gmat);  
  26.  cvConvert(r, rmat);  
  27.   
  28.  //計算飽和度S   
  29.   
  30.  cvMin( bmat, gmat, temp1);  
  31.  cvMin( rmat, temp1, temp1);  
  32.  cvAdd( bmat, gmat, temp2 );  
  33.  cvAdd( temp2, rmat, temp2);  
  34.   
  35.  cvDiv( temp1, temp2, temp3, 765.0);  
  36.  cvAbsDiffS( temp3, temp3, cvScalarAll( 255.0 ));  
  37.  cvConvert( temp3, r );  
  38.   
  39.   
  40.  //計算亮度I   
  41.   
  42.   
  43.  cvAddWeighted( bmat, 1.0/3.0, rmat, 1.0/3.0, 0.0, bmat );  
  44.  cvAddWeighted( bmat, 1.0, gmat, 1.0/3.0, 0.0, bmat);  
  45.  cvConvert( bmat, g );  
  46.   
  47.    
  48.   
  49.  cvShowImage("saturation", r);  
  50.  cvShowImage( "intensity", g);  
  51.  cvWaitKey(0);  
  52.  cvReleaseImage(&img);  
  53.  cvDestroyWindow("saturation");  
  54.  cvDestroyWindow("intensity");  
  55.    
  56.    
  57.  return 0;  
  58. }  
Copyright © Linux教程網 All Rights Reserved