您的位置:首页 > 其它

直方图CvHistogram结构的分析和理解

2014-05-13 02:43 239 查看
用到了直方图结构体: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成员的值一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: