本文以LBP特征为例,介绍了OpenCV中train_cascade数据初始化的过程。
1 在CvCascadeBoost中,创建了CvCascadeBoostTrainData对象。
bool CvCascadeBoost::
train(
const CvFeatureEvaluator* _featureEvaluator,
int _numSamples,
int _precalcValBufSize, int _precalcIdxBufSize,
const CvCascadeBoostParams& _params )
{
bool isTrained = false;
CV_Assert( !data );
clear();
data = new <strong>CvCascadeBoostTrainData</strong>(
_featureEvaluator, _numSamples,
_precalcValBufSize, _precalcIdxBufSize, _params )
……
}
2 在CvCascadeBoostTrainData中调用setData函数。
CvCascadeBoostTrainData::CvCascadeBoostTrainData( const CvFeatureEvaluator* _featureEvaluator,
int _numSamples,
int _precalcValBufSize, int _precalcIdxBufSize,
const CvDTreeParams& _params )
{
<strong> setData</strong>( _featureEvaluator, _numSamples, _precalcValBufSize, _precalcIdxBufSize, _params );
}
3 在setData函数中调用了预先计算特征,也就是参数中preCalcValBufSize, preClacIdxBufSize预留的内存初始化的地方。
void CvCascadeBoostTrainData::setData( const CvFeatureEvaluator* _featureEvaluator,
int _numSamples,
int _precalcValBufSize, int _precalcIdxBufSize,
const CvDTreeParams& _params )
{
……
// precalculate valCache and set indices in buf
<strong> precalculate();</strong>
……
}