0


opencv 学习笔记(十一) 灰度直方图

直方图的计算很简单,无非就是遍历图像的像素,统计每个灰度级的个数,opencv中calcHist函数能够同时计算过个图像,多个通道,不同灰度范围的灰度直方图。

voidcalcHist(const Mat* images,int nimages,constint* channels, InputArray mask,
        OutputArray hist,int dims,constint* histSize,constfloat** ranges,bool uniform =true,bool accumulate =false);

    images 输入的图像
    nimages 输入的图像个数
    channels 统计直方图第几通道
    mask 可选的操作掩码
    hist 输出的直方图数组
    dims 需要统计直方图通道的个数
    histSize 直方图分成多少个区间
    ranges 像素值区间
    uniform 是否进行归一化处理
    accumulate 在多个图像时是否计算像素值个数

接下来直接看代码:

    Mat img;
    
    img =imread("猫1.jpg",0);int channels[]={0};int bins =256;
    
    Mat hist;int hist_size[]={ bins };float range[]={0,256};constfloat*ranges[]={ range };calcHist(&img,1,0,Mat(), hist,1, hist_size, ranges);double max_val;minMaxLoc(hist,0,&max_val);//定义矩阵中最小值,最大值的位置int scale =2;int hist_height =256;
    
    Mat hist_ing =Mat::zeros(hist_height, scale*bins, CV_8UC3);for(int i =0; i < bins; i++){float bin_val = hist.at<float>(i);//图像的灰度频率表int inten =cvRound(bin_val*hist_height / max_val);//绘制高度rectangle(hist_ing,Point(scale*i, hist_height -1),Point((i +1)*scale -1, hist_height - inten),CV_RGB(255,255,255));}imshow("直方图", hist_ing);waitKey(0);

效果如下:
在这里插入图片描述

标签: opencv c++

本文转载自: https://blog.csdn.net/Lightismore/article/details/123926939
版权归原作者 浅念念52 所有, 如有侵权,请联系我们删除。

“opencv 学习笔记(十一) 灰度直方图”的评论:

还没有评论