转自naruto0001的博文 原文地址:http://blog.csdn.net/naruto0001/article/details/8073342
opencv_trainCascade输出的xml格式总结
在CvCascadeClassifier::save(const String filename,bool baseFormat)里当baseFormat为0时,选择输出本文档格式,否则还是输出opencv_haartraining的格式
1.StageClassifier
以上为opencv_trainCascade测试人脸检测的时候出来的第一层的xml文件内容。个人理解含义如下:
<maxWeakCount>表示这一层有几个弱分类器
<stageThreshold>表示这一层的threshold,这个threshold要跟下面所有弱分类器的输出之和比较后然后决定这层的输出时0还是1
<internalNodes> 表示的是这个弱分类器,以第一个internalNodes为例,
0 和 -1表示的是叶节点的索引(leafindex),
后面的那个167 表示的是Node->split->var_idx,即这个节点表示的是哪个feature,即feature的索引,可利用这个索引跟输入图像的序号快速定位输入图像的积分图然后求得这个索引对应的特征值
后面那8个数是CvDTreeSplit的subset的内容,上面算出来的那个特征值会跟这个subset里的特定子集比较来看是不是属于这个子集。
<leafValues>表示左右child的值,即上面属于子集的话output -7.792,否则7.984
2.CascadeClassifier
总的级联分类器分为两部分,
一部分是把各个stageClassifier给合到一起了,见下图,但是有个区别是split->var_index改变了,它把当前这个CascadeClassifier实际用到的feature统计个数,(我这个例子里是302个),然后按照顺序给重新安排var_index.
第二部分是把上面按顺序排列的feature实际用到的rect的位置,宽高进行记录,估计这样在调用的时候可以直接算特征值比较快吧。具体见下下图。