hue.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:2k
源码类别:

OpenCV

开发平台:

Visual C++

  1. #include <cv.h>
  2. #include <highgui.h>
  3. int main( int argc, char** argv )
  4. {
  5.     IplImage* src;
  6.     if( argc == 2 && (src=cvLoadImage(argv[1], 1))!= 0)
  7.     {
  8.         IplImage* h_plane = cvCreateImage( cvGetSize(src), 8, 1 );
  9.         IplImage* s_plane = cvCreateImage( cvGetSize(src), 8, 1 );
  10.         IplImage* v_plane = cvCreateImage( cvGetSize(src), 8, 1 );
  11.         IplImage* planes[] = { h_plane, s_plane };
  12.         IplImage* hsv = cvCreateImage( cvGetSize(src), 8, 3 );
  13.         int h_bins = 30, s_bins = 32;
  14.         int hist_size[] = {h_bins, s_bins};
  15.         float h_ranges[] = { 0, 180 }; /* hue varies from 0 (~0°red) to 180 (~360°red again) */
  16.         float s_ranges[] = { 0, 255 }; /* saturation varies from 0 (black-gray-white) to 255 (pure spectrum color) */
  17.         float* ranges[] = { h_ranges, s_ranges };
  18.         int scale = 10;
  19.         IplImage* hist_img = cvCreateImage( cvSize(h_bins*scale,s_bins*scale), 8, 3 );
  20.         CvHistogram* hist;
  21.         float max_value = 0;
  22.         int h, s;
  23.         cvCvtColor( src, hsv, CV_BGR2HSV );
  24.         cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );
  25.         hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1 );
  26.         cvCalcHist( planes, hist, 0, 0 );
  27.         cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );
  28.         cvZero( hist_img );
  29.         for( h = 0; h < h_bins; h++ )
  30.         {
  31.             for( s = 0; s < s_bins; s++ )
  32.             {
  33.                 float bin_val = cvQueryHistValue_2D( hist, h, s );
  34.                 int intensity = cvRound(bin_val*255/max_value);
  35.                 cvRectangle( hist_img, cvPoint( h*scale, s*scale ),
  36.                    cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),
  37.                    CV_RGB(intensity,intensity,intensity), 
  38.                              CV_FILLED );
  39.             }
  40.         }
  41.         cvNamedWindow( "Source", 1 );
  42.         cvShowImage( "Source", src );
  43.         cvNamedWindow( "H-S Histogram", 1 );
  44.         cvShowImage( "H-S Histogram", hist_img );
  45.         cvWaitKey(0);
  46.     }
  47. }