之前被OpenCV的直方图的数据结构CvHistogram弄得很纠结。上网一搜,也没什么相关的资料。现在有点头绪了,就写点东西,让后面的人好走一些吧。
先来看看CvHistogram的定义:
typedef structCvHistogram
{
int type;
CvArr* bins;
float thresh[CV_MAX_DIM][2]; /* For uniformhistograms. */
float**thresh2; /* For non-uniform histograms. */
CvMatND mat; /*Embedded matrix header for array histograms. */
}
CvHistogram;
第一个成员type,相信大家都见过很多结构都有其。比如:CvMat、CvMatND、IplImage(图像结构中,其用nSize成员代替)。这个成员用来区分各个类型的。OpenCV很多函数的原型都用到了一个CvArr*类型。这个类型说明可以接受一个CvMat或者IplImage类型的指针。这是我们对它的最初理解。其实,看过CvArr定义的人都知道,其实是typedefvoid CvArr;并非派生关系。 对于OPenCV函数内部,得到的是一个void指针,这时就有必要确切的知道得到的到底是一个什么类型