OpenCV学习笔记(五):计算图像直方图

来源:互联网 发布:怎样加入淘宝网店 编辑:程序博客网 时间:2024/06/09 20:05

像素值在图像中的分布情况是这幅图像的一个重要特征。直方图是一个简单的表,它给出了衣服图像或一组图像中拥有给定数值的像素数量。在OpenCV中计算直方图可以通过使用cv::clacHist()函数。这是一个通用函数,可计算任意像素类型的多通道图像。我们可以编写函数将直方图使用柱状图可视化。
cv::clacHist()函数允许你指定一个分布在几个图像中的多通道图像,所以函数要求的参数大多是数组。

cv::Mat getHistImg(const cv::Mat &img){    cv::MatND hist;         //存储直方图的N维矩阵    int channels[1]={0};    //通道数    int size[1] = {256};    //项的数量    cv::Mat histImg(size[0],size[0],CV_8U,cv::Scalar(255));    //直方图柱状图    float hranges[2]={0,255};    //像素值范围    const float *ranges[0];    ranges[0]=hranges;    double maxVal=0,minVal=0;        cv::calcHist(&img,1,channels,cv::Mat(),hist,1,size,ranges);    cv::minMaxLoc(hist,&minVal,&maxVal);    //获取最值    int hpt = 0.9*size[0];    //最高点为图像高的90%    //绘制垂直线    for(int i=0;i<size[0];i++)    {        float val = hist.at<float>(i);        int intensity = val*hpt/maxVal;        cv::line(histImg,cv::Point(i,size[0]),cv::Point(i,size[0]-intensity),cv::Scalar(0));    }    return histImg;}
0 0
原创粉丝点击