opencv——灰度直方圖

#include <opencv2/opencv.hpp>
#include <stdio.h>

// HIstogram.cpp : 定義控制檯應用程序的入口點。  
//  
  
#define cvQueryHistValue_1D( hist, idx0 )   ((float)cvGetReal1D( (hist)->bins, (idx0))) 
  
int main()  
{  
    IplImage* src= cvLoadImage("C:\\Users\\wxh\\Documents\\Visual Studio 2010\\Projects\\9.24\\9.24\\1.jpg");  
    IplImage* gray_dst= cvCreateImage(cvGetSize(src), 8, 1);  
    cvCvtColor(src, gray_dst, CV_BGR2GRAY);  
  
    //一維維數  
    int dims= 1;  
    //直方圖的尺寸  
    int size= 256;  
    //直方圖的高度  
    int height = 256;  
    //灰度圖的範圍0到255  
    float range[]= {0, 256};  
    float *ranges[]= {range};   
      
    //創建一維直方圖  
    CvHistogram* hist;  
    hist= cvCreateHist(dims, &size, CV_HIST_ARRAY, ranges, 1);        
  
    //計算灰度圖的一維直方圖  
    cvCalcHist(&gray_dst, hist, 0, 0);  
    //歸一化直方圖  
    cvNormalizeHist(hist, 1.0);  
  
    int scale= 2;  
    //創建圖像,用於顯示直方圖  
    IplImage* hist_img= cvCreateImage(cvSize(size* scale, height), 8, 3);  
    //圖像置零  
     cvZero(hist_img);  
  
     //計算直方圖的最大方塊值,初始化爲0  
     float max_value= 0;  
     cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0);  
  
     //繪製直方圖  
     for(int i=0; i<size; i++)  
     {  
         float bin_val= cvQueryHistValue_1D(hist,i);   //像素i的概率  
         int intensity = cvRound(bin_val* height/ max_value);  // 繪製的高度  
         cvRectangle(hist_img,  
                            cvPoint(i* scale, height- 1),  
                            cvPoint((i+1)* scale- 1, height- intensity),  
                            CV_RGB(255, 255, 255));  
     }  
  
     cvNamedWindow("gray");  
     cvShowImage("gray", gray_dst);  
     cvNamedWindow("Histogram");  
     cvShowImage("Histogram", hist_img);  
  
     cvWaitKey(0);  
  
     cvReleaseImage(&src);  
     cvReleaseImage(&gray_dst);  
     cvReleaseImage(&hist_img);  
  
     cvDestroyWindow("gray");  
     cvDestroyWindow("Histogram");  
  
     return 0;  
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章