一:调用模型
CascadeClassifier facedetector;
if (!facedetector.load("D:\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"))
{
cout << "error load" << endl;
}
facedetector.detectMultiScale(frame_gray, faces, rejectLevels, levelWeights, 1.1 , 4, 0, Size(30,30), Size(),true);
检测函数detectMultiScale,函数的各个参数意义。如果不详细看代码,只是简单的运行这一句,会发现这样得到的结果中误检的框很多,很严重
源码D:\opencv\opencv\sources\modules\objdetect\src\cascadedetect.cpp
二:detectMultiScale函数
if( !detectSingleScale( scaledImage, stripCount, processingRectSize, stripSize, yStep, factor, candidates,
rejectLevels, levelWeights, outputRejectLevels ) )
break;
if( outputRejectLevels )
{
groupRectangles( objects, rejectLevels, levelWeights, minNeighbors, GROUP_EPS );
}
else
{
groupRectangles( objects, minNeighbors, GROUP_EPS );
}
有两处表明rejectLevels,levelWeights的调用,问题在这里
三:detectSingleScale单一尺度下的检测函数
if( outputRejectLevels )
{
parallel_for_(Range(0, stripCount), CascadeClassifierInvoker( *this, processingRectSize, stripSize, yStep, factor,