/*-----------------------------------------
opencv 绘制灰度直方图,主要利用 CvHistogram()函数
-----------------------------------------*/
#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>
int main()
{
IplImage *src = cvLoadImage("lena.jpg", 0);
int size = 256;
float range[] = {0, 255};
float *ranges[] = {range};
CvHistogram *hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
cvCalcHist(&src, hist, 0, NULL);
float max = 0;
cvGetMinMaxHistValue(hist, NULL, &max, NULL, NULL);
IplImage* dst=cvCreateImage(cvSize(400,300),8,3);
cvSet(dst, cvScalarAll(255), 0);
double bin_width = (double)dst->width/size;
{
CvPoint p0 = cvPoint(i*bin_width, dst->height);
CvPoint p1 = cvPoint((i+1)*bin_width, dst->height - cvGetReal1D(hist->bins, i)*bin_unith);
cvRectangle(dst, p0, p1, cvScalar(0, 255), -1, 8, 0);
cvShowImage("src", src);
cvNamedWindow("dst", 1);
cvShowImage("dst", dst);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
opencv 绘制灰度直方图,主要利用 CvHistogram()函数
-----------------------------------------*/
#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>
int main()
{
IplImage *src = cvLoadImage("lena.jpg", 0);
int size = 256;
float range[] = {0, 255};
float *ranges[] = {range};
CvHistogram *hist = cvCreateHist(1, &size, CV_HIST_ARRAY, ranges, 1);
cvCalcHist(&src, hist, 0, NULL);
float max = 0;
cvGetMinMaxHistValue(hist, NULL, &max, NULL, NULL);
IplImage* dst=cvCreateImage(cvSize(400,300),8,3);
cvSet(dst, cvScalarAll(255), 0);
double bin_width = (double)dst->width/size;
double bin_unith = (double)dst->height/max;
{
CvPoint p0 = cvPoint(i*bin_width, dst->height);
CvPoint p1 = cvPoint((i+1)*bin_width, dst->height - cvGetReal1D(hist->bins, i)*bin_unith);
cvRectangle(dst, p0, p1, cvScalar(0, 255), -1, 8, 0);
}
cvShowImage("src", src);
cvNamedWindow("dst", 1);
cvShowImage("dst", dst);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}