chap 7 单通道直方图的显示
#include<opencv2/opencv.hpp>
#include<opencv/cv.h> // necessary for cvQueryHistValue_1D
// chap 7 单通道直方图的显示
void main()
{
// 只显示 src 的某一路分量直方图
IplImage* src=cvLoadImage("D:\\lxlx\\one.jpg");
IplImage* img_b=cvCreateImage(cvGetSize(src),8,1);
cvSplit(src,img_b,0,0,0); // 获取单通道分量
cvNamedWindow("img_b");
cvShowImage("img_b",img_b);
IplImage* plane_b={img_b};
int hist_size=256;
int hist_height=256;
float range[]={0,255};
float* ranges[]={range};
CvHistogram *hist=cvCreateHist(1,&hist_size,CV_HIST_ARRAY,
ranges, // here is the key to show hist_1D
1 );
cvCalcHist(&plane_b,hist,0,0);
int scale=10; // 缩放0-255 各级的幅度,方便小窗口高度显示直方图
IplImage* hist_img=cvCreateImage(cvSize(256,100),8,3);
cvZero(hist_img);
for ( int h=0;h<256;h++)
{
float val = cvQueryHistValue_1D(hist,h);
// 注意 xoy 方向 与 常规 直方图视图不一致
cvLine(hist_img,cvPoint(h,100),
cvPoint(h,100-cvRound(val)/scale),CV_RGB(255,0,0));
}
cvNamedWindow("hist_img");
cvShowImage("hist_img",hist_img);
cvWaitKey(0);
}
运行结果:黑色底纹,红色表示 img_b 直方图统计结果。