计算灰度图像的归一化直方图

利用OpenCV 对图像像素进行操作,计算归一化直方图并在窗口中以图形的方式显示出来。

具体代码如下:


//一、归一化直方图

#include "stdafx.h"
#include 
#include 

int _tmain_1(int argc, _TCHAR* argv[])
{
	IplImage * src = cvLoadImage("1.jpg");
	IplImage* gray_plane = cvCreateImage(cvGetSize(src),8,1);
	cvCvtColor(src,gray_plane,CV_BGR2GRAY);

	int hist_size = 256;    //直方图尺寸
	int hist_height = 256;
	float range[] = {0,255};	//灰度级的范围
	float* ranges[] = {range};

	//创建一维直方图,统计图像在[0,255]像素的均匀分布
	CvHistogram* gray_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);

	//计算灰度图像的一维直方图
	cvCalcHist(&gray_plane,gray_hist,0,0);

	//归一化直方图
	cvNormalizeHist(gray_hist,1.0);

	int scale = 2;
	//创建一张一维直方图的“图像”,横坐标为灰度级,纵坐标为像素个数(*scale)
	//图像位深度为8位整形,每个元素通道号为3
	IplImage* hist_image = cvCreateImage(cvSize(hist_size*scale,hist_height),8,3);
	//初始化,图像清零
	cvZero(hist_image);
	//统计直方图中的最大直方块
	float max_value = 0;
	cvGetMinMaxHistValue(gray_hist,0,&max_value,0,0);
	
	//分别将每个直方块的值绘制到图中
	for(int i=0;i


你可能感兴趣的:(C++)