织梦CMS - 轻松建站从此开始!

罗索

cvCreateHist【OpenCV绘制直方图】

罗索客 发布于 2010-01-14 19:20 点击:次 
今天群里的朋友问到cvCreateHist的使用,我之前没有编写过,所以也是有些不懂!~在网上搜了一下相应的代码,看了一下,理解了一些!~代码如下,希望对大家也有用!~
TAG:

今天群里的朋友问到cvCreateHist的使用,我之前没有编写过,所以也是有些不懂!~在网上搜了一下相应的代码,看了一下,理解了一些!~代码如下,希望对大家也有用!~

  1. #include <cv.h>  
  2. #include <highgui.h>  
  3.  
  4. int main( int argc, char** argv )
  5. {
  6.     IplImage* src;
  7.     if( argc == 2 && (src=cvLoadImage(argv[1], 1))!= 0)
  8.     {
  9.         IplImage* h_plane = cvCreateImage( cvGetSize(src), 8, 1 );
  10.         IplImage* s_plane = cvCreateImage( cvGetSize(src), 8, 1 );
  11.         IplImage* v_plane = cvCreateImage( cvGetSize(src), 8, 1 );
  12.         IplImage* planes[] = { h_plane, s_plane };
  13.         IplImage* hsv = cvCreateImage( cvGetSize(src), 8, 3 );
  14.         int h_bins = 30, s_bins = 32;
  15.         int hist_size[] = {h_bins, s_bins};
  16. /* hue varies from 0 (~0°red) to 180 (~360°red again) */
  17.         float h_ranges[] = { 0, 180 };
    • /* saturation varies from 0 (black-gray-white) to 255 (pure spectrum color) */
    •         float* ranges[] = { h_ranges, s_ranges };
    •         int scale = 10;
    •         IplImage* hist_img = cvCreateImage( cvSize(h_bins*scale,s_bins*scale), 8, 3 );
    •         CvHistogram* hist;
    •         float max_value = 0;
    •         int h, s;
    •  
    •         cvCvtColor( src, hsv, CV_BGR2HSV );  
    •         cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );  
    •         hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1 );  
    •         cvCalcHist( planes, hist, 0, 0 );  
    •         cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );  
    •         cvZero( hist_img );  
    •  
    •         for( h = 0; h < h_bins; h++ )  
    •         {  
    •             for( s = 0; s < s_bins; s++ )  
    •             {  
    • //graw a grayscale histogram.
      //if you have idea how to do it
      //nicer let us know
                      
      float bin_val = cvQueryHistValue_2D( hist, h, s );  
    •                 int intensity = cvRound(bin_val*255/max_value);  
    •                 cvRectangle( hist_img, cvPoint( h*scale, s*scale ),  
    •                              cvPoint( (h+1)*scale - 1, (s+1)*scale - 1),  
    •                              CV_RGB(intensity,intensity,intensity), 
    •                              CV_FILLED );  
    •             }  
    •         }  
    •  
    •         cvNamedWindow( "Source", 1 );  
    •         cvShowImage( "Source", src );  
    •  
    •         cvNamedWindow( "H-S Histogram", 1 );  
    •         cvShowImage( "H-S Histogram", hist_img );  
    •  
    •         cvWaitKey(0);  
    •     }  
    float s_ranges[] = { 0, 255 };

 

(罗索客)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201001/8296.html]
本文出处:网络博客 作者:罗索客
顶一下
(0)
0%
踩一下
(12)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容