OPENCV中画图像直方图(带刻度并可以通过滚动条调节直方图中直方条的个数)
本文是在《OpenCV教程基础篇》例题5-11的基础上进行的修改。
本文亮点:
(1)可以通过调节滚动条,来实现调节直方图中输出直方条的个数;
(2)在输出的直方图中添加了横纵坐标刻度,并且这些刻度可以随着滚动条的调节自适应改变。
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <ctype.h>
using namespace std;
using namespace cv;
IplImage *src = 0;
IplImage *histimg = 0;
CvHistogram *hist = 0;
int hdims = 50; // 划分HIST的初始个数,越高越精确
//滚动条函数
void HIST(int t)
{
float hranges_arr[] = {0,255};
float* hranges = hranges_arr;
int bin_w;
int bin_u;
float max;
int i;
char string[10];
CvFont font;
cvInitFont( &font, CV_FONT_HERSHEY_PLAIN,1, 1, 0, 1, 8);//字体结构初始化
if(hdims==0)
{
printf("直方图条数不能为零!\n");
}
else
{
hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 ); // 创建直方图
histimg = cvCreateImage(cvSize(800,512),8,3);
cvZero( histimg );
cvCalcHist( &src, hist, 0, 0 ); // 计算直方图
cvGetMinMaxHistValue(hist,NULL,&