cvhistogram,軟體名,創建多維直方圖。
基本介紹
- 中文名:cvhistogram
- 外文名:cvhistogram
- 類型:多維直方圖
- 隸屬:軟體
直方圖,多維直方,創建直方,函式,例子,
直方圖
多維直方
多維直方圖
typedef struct CvHistogram{
int header_size; /* 頭尺寸 */
CvHistType type; /* 直方圖類型 */
int flags; /* 直方圖示識 */
int c_dims; /* 直方圖維數 */
int dims[CV_HIST_MAX_DIM]; /* 每一維的尺寸 */
int mdims[CV_HIST_MAX_DIM]; /* 快速訪問元素的係數 */
/* &m[a,b,c] = m + a*mdims[0] + b*mdims[1] + c*mdims[2] */
float* thresh[CV_HIST_MAX_DIM]; /* 每一維的直方塊邊界數組 */
float* array; /* 所有的直方圖數據,擴展為單行 */
struct CvNode* root; /* 存儲直方塊的平衡樹的根結點 */
CvSet* set; /* 記憶體存儲倉的指針 (對平衡樹而言) */
int* chdims[CV_HIST_MAX_DIM]; /* 快速計算的快取 */
} CvHistogram;
創建直方
創建直方圖
CvHistogram* cvCreateHist( int dims, int* sizes, int type, float** ranges=NULL, int uniform=1 );
- dims
- 直方圖維數的數目
- sizes
- 直方圖維數尺寸的數組
- type
- 直方圖的表示格式: CV_HIST_ARRAY 意味著直方圖數據表示為多維密集數組 CvMatND; CV_HIST_TREE 意味著直方圖數據表示為多維稀疏數組CvSparseMat.
- ranges
- 圖中方塊範圍的數組. 它的內容取決於參數 uniform 的值。這個範圍的用處是確定何時計算直方圖或決定反向映射(backprojected ),每個方塊對應於輸入圖像的哪個/哪組值。
- uniform
- 歸一化標識。 如果不為0,則ranges[i](0<=i<cDims,譯者註:cDims為直方圖的維數,對於灰度圖為1,彩色圖為3)是包含兩個元素的範圍數組,包括直方圖第i維的上界和下界。在第i維上的整個區域 [lower,upper]被分割成 dims[i] 個相等的塊(譯者註:dims[i]表示直方圖第i維的塊數),這些塊用來確定輸入象素的第 i 個值(譯者註:對於彩色圖像,i確定R, G,或者B)的對應的塊;如果為0,則ranges[i]是包含dims[i]+1個元素的範圍數組,包括lower0, upper0, lower1, upper1 == lower2, ..., upperdims[i]-1, 其中lowerj 和upperj分別是直方圖第i維上第 j 個方塊的上下界(針對輸入象素的第 i 個值)。任何情況下,輸入值如果超出了一個直方塊所指定的範圍外,都不會被 cvCalcHist 計數,而且會被函式cvCalcBackProject 置零。
函式
cvCreateHist 創建一個指定尺寸的直方圖,並且返回創建的直方圖的指針。 如果數組的 ranges 是 0, 則直方塊的範圍必須由函式cvSetHistBinRanges 稍後指定。雖然 cvCalcHist 和 cvCalcBackProject 可以處理 8-比特圖像而無需設定任何直方塊的範圍,但它們都被假設等分 0..255 之間的空間。
例子
...src = cvLoadImage(imgName);IplIMage* hsv = cvCreateImage(cvGetSize(src), 8, 3);cvCvtColor(src, hsv, CV_BGR2HSV);IplImage* h_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* s_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* v_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* planes[] = {h_plane, s_plane, v_plane};cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane);int h_bins = 30, s_bins = 32;CvHistogram* hist;int hist_size[] = {h_bins, s_bins};float h_ranges[] = {0, 180};float s_ranges[] = {0, 255};float* ranges[] = {h_ranges, s_ranges};hist = cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1);cvCalcHist(planes, hist, 0, 0);...