25.直方圖計算

1.主要內容

  • 直方圖概念
  • API學習
  • 代碼演示

2.直方圖概念

  • 基本介紹
    假設有圖像數據8x8,像素值範圍0~14共15個灰度等級,統計得到各個等級出現次數及直方圖如下圖所示,每個紫色的長條叫BIN(值的範圍大小)。
    在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
將bins劃分爲16個等級,每個等級有16位
在這裏插入圖片描述
在這裏插入圖片描述

  • 上述直方圖概念是基於圖像像素值,其實對圖像梯度、每個像素的角度、等一切圖像的屬性值,我們都可以建立直方圖。這個纔是直方圖的概念真正意義,不過是基於圖像像素灰度直方圖是最常見的。

直方圖最常見的幾個屬性:
dims:表示維度,對灰度圖像來說只有一個通道
bins:表示維度中子區域大小劃分,bins=256,劃分爲256個級別
range:表示值的範圍,灰度值範圍在【0-255】之間(轉換到HSV空間時,H【0-300】S【0-180】)

3.API學習

split(//把多通道圖像分爲多個單通道圖像
    const Mat &src,//輸入圖像
    Mat* mvbegin//輸出的通道圖像數組 
) 
calcHist(
    const Mat* images,//輸入圖像指針
    int images,//圖像數目
    const int* channels,//通道數
    InputArray mask,//輸入mask,可選,不用,沒有的話直接寫Mat()。表示空的
    OutputArray hist,//輸出的直方圖數據
    int dims,//維數
    const int* histsize,//直方圖級數
    const float** ranges,//值域範圍
    bool uniform,//true by default
    bool accumulate//false by default
)
 void normalize(
 InputArray src,//src  輸入數組
 OutputArray dst, //dst 輸出數組,支持原地運算
 double alpha=1,//  range normalization模式的最小值
  doublebeta=0, //range normalization模式的最大值,不用於norm normalization(範數歸一化)模式。
  int norm_type=NORM_L2, 
 /* 歸一化的類型,可以有以下的取值:
    NORM_MINMAX:數組的數值被平移或縮放到一個指定的範圍,線性歸一化,一般較常用。
    NORM_INF: 此類型的定義沒有查到,根據OpenCV 1的對應項,可能是歸一化數組的C-範數(絕對值的最大值)
    NORM_L1 :  歸一化數組的L1-範數(絕對值的和)
    NORM_L2: 歸一化數組的(歐幾里德)L2-範數
 */
  int dtype =-1, //  dtype爲負數時,輸出數組的type與輸入數組的type相同;否則,輸出數組與輸入數組只是通道數相同,而tpye=CV_MAT_DEPTH(dtype).
  InputArray mask=noArray() //操作掩膜,用於指示函數是否僅僅對指定的元素進行操作。
  )

4.代碼演示

在這裏插入圖片描述

5.舉例

通過上述代碼來的出下列的RGB三通道的直方圖,有時可以用來計算閾值,較容易得出參數
在這裏插入圖片描述

6.課外擴展

OpenCV探索之路(十四):繪製點、直線、幾何圖形
OpenCV2中矩陣的歸一化 normalize函數詳解
【雜談opencv】OpenCV中的cvRound()、cvFloor()、 cvCeil()函數講解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章