You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haar-Cascade源码haar.cpp中CvHidHaar系列结构体成员含义咨询

以下是你提到的几个结构体成员的具体含义,这些是OpenCV早期Haar级联目标检测器的内部隐藏结构体,专门针对检测推理做了优化:

涉及的结构体定义

typedef struct CvHidHaarFeature
{
    struct
    {
        sumtype *p0, *p1, *p2, *p3;
        float weight;
    }
    rect[CV_HAAR_FEATURE_MAX];
} CvHidHaarFeature;


typedef struct CvHidHaarTreeNode
{
    CvHidHaarFeature feature;
    float threshold;
    int left;
    int right;
} CvHidHaarTreeNode;


typedef struct CvHidHaarClassifier
{
    int count;
    CvHidHaarTreeNode* node;
    float* alpha;
} CvHidHaarClassifier;


typedef struct CvHidHaarStageClassifier
{
    int  count;
    float threshold;
    CvHidHaarClassifier* classifier;
    int two_rects;

    struct CvHidHaarStageClassifier* next;
    struct CvHidHaarStageClassifier* child;
    struct CvHidHaarStageClassifier* parent;
} CvHidHaarStageClassifier;


typedef struct CvHidHaarClassifierCascade
{
    int  count;
    int  isStumpBased;
    int  has_tilted_features;
    int  is_tree;
    double inv_window_area;
    CvMat sum, sqsum, tilted;
    CvHidHaarStageClassifier* stage_classifier;
    sqsumtype *pq0, *pq1, *pq2, *pq3;
    sumtype *p0, *p1, *p2, *p3;

    void** ipp_stages;
} CvHidHaarClassifierCascade;

成员含义解释

CvHidHaarFeature 结构体的 weight

单个Haar特征由最多3个矩形区域组成,weight是当前矩形的权重系数:计算特征值时,先通过积分图指针p0/p1/p2/p3算出当前矩形的像素和,乘以weight,所有矩形的计算结果累加就是当前Haar特征的最终输出值。

CvHidHaarTreeNode 结构体成员

  • threshold:当前树节点的判定阈值。将前面计算得到的Haar特征值和该阈值比对,决定分支走向。
  • left:特征值小于阈值时的跳转位置。如果值≥0,代表当前分类器树节点数组的下标,跳转后继续做下一级节点判定;如果值<0,代表当前是叶子节点,绝对值减1就是alpha数组的索引,直接取对应alpha值作为该弱分类器的输出。
  • right:特征值大于等于阈值时的跳转位置,跳转规则和left完全一致。

CvHidHaarClassifier 结构体成员

  • count:当前弱分类器对应的决策树的节点总数。如果是常用的树桩分类器(单节点决策树),count值为1。
  • alpha:Adaboost训练得到的弱分类器输出权重数组,每个叶子节点对应一个alpha值。所有弱分类器的输出累加后和阶段阈值比对,即可判断当前检测窗口是否为目标。

内容的提问来源于stack exchange,提问作者Roni Polak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:15:02