// : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê
//
#include ""
#include<opencv\>
#include<opencv\>
#include<opencv2\highgui\>
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *src=cvLoadImage("E:\\picture\\"); //加载图像
cvNamedWindow("sr"); //创建显示窗口
cvShowImage("sr",src); //显示图像
int size=256;
float range[]={0,255};
float *ranges[]={range};
CvHistogram *hist=cvCreateHist(1,&size, CV_HIST_ARRAY,ranges,1);//创建一维直方图
IplImage* gray=cvCreateImage(cvGetSize(src),8,1);
cvCvtColor(src,gray,CV_BGR2GRAY);
//vCvtColor(...),是Opencv里的颜色空间转换函数可以实现RGB颜色向HSV,HSI等颜色空间的转换?也可以转换为灰度图像
//参?数CV_RGB2GRAY是RGB到gray,
//参数CV_GRAY2RGB是gray到RGB
cvCalcHist(&gray,hist,0,0);//统计图像在[0 255]像素的均匀分布,将统计结果在结构体中
//draw histogram-----
//统ª计直方图中的最大直块¨¦
float histMax=0;
cvGetMinMaxHistValue(hist,0,&histMax,0);
//创建一张一维直方图的图,横坐标为灰度级,纵坐标为像素个数
IplImage *grayHist=cvCreateImage(cvSize(256*2,64*2),8,1);
cvZero(grayHist);
//分别将每个直方块的值绘制到图
for(int i=0;i<255;i++)
{
float histValue=cvQueryHistValue_1D(hist,i);
float nextValue=cvQueryHistValue_1D(hist,i+1);
//计算直方块4个点的值
CvPoint pt1=cvPoint(i*2,64*2);
CvPoint pt2=cvPoint((i+1)*2,64*2);
CvPoint pt3=cvPoint((i+1)*2,(64-(nextValue/histMax)*64)*2);
//nextValue/hist
灰度直方图实现 来自淘豆网m.daumloan.com转载请标明出处.