#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;
}
opencv——灰度直方圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.