aihot  2017-05-08 10:59:41  OpenCV |   查看评论   
,256}; float hranges[2]={0,255}; const float* ranges[3]={hranges,hranges,hranges}; MatND hist; calcHist(&Image,1,channels,Mat(),hist,3,histSize,ranges); return 0; }

不均匀直方图,我们分别统计0-50,50-80,80-150,150-230,230-255区间的灰度分布:

int main() {     Mat Image=imread("../cat.png");     cvtColor(Image,Image,CV_BGR2GRAY);      const int channels[1]={0};     int histSize[1]={5};     float hranges[6]={0,50,80,150,230,255};     const float* ranges[1]={hranges};      MatND hist;     calcHist(&Image,1,channels,Mat(),hist,1,histSize,ranges,false);      return 0; }

三、直方图的显示

从上面的例子中我们可以看出,直方图计算得到的实际上是一个多维数组,这并不够直观,我们希望能够像在Excel中把相关数据通过表的形式表示出来。

下面通过划线函数来把一个灰度直方图显示出来:

Mat getHistImg(const MatND& hist) {     double maxVal=0;     double minVal=0;      //找到直方图中的最大值和最小值
    minMaxLoc(hist,&minVal,&maxVal,0,0);     int histSize=hist.rows;     Mat histImg(histSize,histSize,CV_8U,Scalar(255));     // 设置最大峰值为图像高度的90%
    int hpt=static_cast<int>(0.9*histSize);      for(int h=0;h<histSize;h++)     {         float binVal=hist.at<float>(h);         int intensity=static_cast<int>(binVal*hpt/maxVal);         line(histImg,Point(h,histSize),Point(h,histSize-intensity),Scalar::all(0));     }      return histImg; }
OpenCV成长之路(4):图像直方图  OpenCV成长之路(4):图像直方图

 

四、直方图变换

直方图变换是图像处理中一个很重要的概念,图像直方图可以反映出图像对比度,明暗程度等特征,所以我们可以利用直方图的变换进行图像画面的调节。

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV成长之路(4):图像直方图

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]