本博是笔者读书笔记整理,欢迎转载,请注明出处,如有不足,还望网友们指教。
1 结构体CvTHaarFeature
typedef struct CvTHaarFeature
{
char desc[CV_HAAR_FEATURE_DESC_MAX];//表示haar特征的类型描述
int tilted;//为0时表示是垂直,1时表示旋转
struct
{
CvRect r;//矩形,用坐标表示(x,y,w,h,权重)
float weight;//权重
} rect[CV_HAAR_FEATURE_MAX];//CV_HAAR_FEATURE_MAX组成矩形特征最多的个数,一般为3个
} CvTHaarFeature;
结构体CvTHaarFeature是最简单的一类haar特征,有三个矩形构成,不管实际的haar特征是不是有三个矩形,在建立内存时都分配三个矩形的内存,如果rect[2].weight!=0,那么,这个特征包含3个矩形,否则就只包含2个矩形。所以我认为CvTHaarFeature中T的含义是three的含义,不知道对不对,还望网友们批评指正

2 CvFastHaarFeature结构体
typedef struct CvFastHaarFeature
{
int tilted;//为0时表示是垂直,1时表示旋转
struct
{
int p0, p1, p2, p3;
//特征中的矩形的四个端点直接用相对于原点的距离,不过是用像素值表示,这样在计算中可以直接利用积分图,所以提高了计算速度,降低了时间复杂度
float weight;//权重
} rect[CV_HAAR_FEATURE_MAX];
} CvFastHaarFeature;
CvFastHaarFeature结构体 与结构体CvTHaarFeature都是表示的最简单的三矩形的haar特征,不过CvTHaarFeature是用相对坐标表示的,比如r(x,y,w,h,weight),其中(x,y)是一个矩形左上角相对原点的坐标,w,h是该矩形的宽表示的,那么矩形的其他的三个矩形是由(x,y)和w,h相对表示出来的。
CvFastHaarFeature结构体中,矩形中的每一点的坐标都是用相对坐标原点的坐标表示,如上所示。要想把CvTHaarFeature中的矩形r(x,y,w,h,weight),转化为CvFastHaarFeature的形式,计算公式如下:
P0 = rect.x + step*rect.y;
P1 = rect.x + rect.width + step*rect.y;
P2 = rect.x + step*(rect.y + rect.height);
P3 = rect.x + rect.width +step*(rect.y+rect.height);
3 结构体CvIntHaarFeatures
3 结构体CvIntHaarFeatures
typedef struct CvIntHaarFeatures
{
CvSize winsize; <span style="font-family:SimSun;">//</span>采特征的窗口的大小,即样本图像的大小。
int count; <span style="font-family:SimSun;">//</span>总特征的个数。
CvTHaarFeature* feature; <span style="font-family:SimSun;">//</span>指向所有的Haar特征。
CvFastHaarFeature* fastfeature;
} CvIntHaarFeatures;
CvIntHaarFeatures中Int是内部的意思,表示存储所有Haar特征的结构体,Haar特征由指针CvTHaarFeature所指向。该结构体把上面两种结构体综合了起来。