直方圖結構體:CvHistogram

在上個示例程序中,用到了直方圖結構體:CvHistogram,現在來具體的研究一下這個結構。

定義:

typedef struct CvHistogram

{

    int     type;

    CvArr*  bins;

    float   thresh[CV_MAX_DIM][2]; 

    float** thresh2;               

    CvMatND mat;                   

}CvHistogram;

 

第一個成員type:用來指定第二個成員bins的具體類型。bins的類型是CvArr*,看其定義可以知道,CvArr* 僅僅是被用於作函數的參數,用於指示函數接收的數組類型可以不止一個,如 IplImage*, CvMat* 甚至 CvSeq*,所以需要type來具體指定bins的類型。

 

 第二個成員bins : 用於存放直方圖每個灰度級數目的數組指針,數組在cvCreateHist 的時候創建,其維數由cvCreateHist 確定(一般以一維比較常見)。

 

第三個成員thresh:一個二維數組,CV_MAX_DIM對應直方圖的維數。且第二維固定爲2。

這個數組比較難理解,首先要理解什麼是一維直方圖和二維直方圖。一維直方圖就是單通道圖像的直方圖,或者彩色圖像中某個單獨通道的直方圖。二維直方圖就是2個通道的直方圖,比如彩色圖像的紅-藍直方圖。既然是直方圖,必定有上下界,所以thresh的第二維是2,比如[0 255],就是統計[0-255]區間灰度分佈的直方圖。而二維紅-藍直方圖的thresh爲[0 255;100 200],就是分別統計紅色圖像灰度級在[0 255]以及藍色圖像在灰度級[100 200]的分佈情況。

 

第四個成員是thresh2一個二維數組指針,用於非均勻直方圖的情形。如果是均勻直方圖,會自動根據bin的個數均分上下界,每個bin的大小一樣。若是非均勻直方圖,就要用到thresh2這個參數指定每個區間的上下界,要是多維的直方圖,那麼就要爲每一維的所有bin都設定上下界。

 

最後一個成員mat,用來存儲數據。

 

cvCalcHist函數對圖像進行操作後,得到了每一個bin的大小,並存放到mat的data成員指向的內存中。bins成員的值和mat裏的data成員的值一樣。 

 

發佈了4 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章