计算直方图---calcHist()
#include"opencv2/opencv.hpp"
#include<iostream>
using namespace std;
using namespace cv;
void main()
{
Mat img = imread("d://1.jpg",0);
imshow("原图",img);
Mat dstHist;
int dims = 1;
float hranges[] = {0,256};//255+1=256
const float*ranges[] = {hranges};
int bins = 256;
int channnels = 0;//0通道
calcHist(&img, 1, &channnels, Mat(), dstHist, dims, &bins, ranges);
int scale = 1;
Mat dstImg(bins*scale,bins*1,CV_8UC3,Scalar(0));
double minValue = 0;
double maxValue = 0;
minMaxLoc(dstHist,&minValue,&maxValue,0,0);
int hpt = saturate_cast<int>(0.9*bins);//缩小到原来组距的0.9倍
for (int i = 0; i < 256; i++)
{
float binValue = dstHist.at<float>(i);//第i个像素的值在hist中是float类型
int realValue = saturate_cast<int>(binValue/maxValue*hpt);
line(dstImg,Point(i*scale,bins-1),Point(i*scale,bins-realValue+1),Scalar(0,255,0),1,8);//注意X,Y的方向。
}
imshow("Hist",dstImg);
waitKey(0);
}