如何仅以1:1比例强制执行OpenCV CascadeClassifier::detectMultiScale功能搜索?
默认使用多少刻度?
for( double factor = 1; ; factor *= scaleFactor )
{
Size originalWindowSize = getOriginalWindowSize();
Size windowSize( cvRound(originalWindowSize.width*factor), cvRound(originalWindowSize.height*factor) );
if( windowSize.width > maxObjectSize.width || windowSize.height > maxObjectSize.height ||
windowSize.width > imgsz.width || windowSize.height > imgsz.height )
break;
if( windowSize.width < minObjectSize.width || windowSize.height < minObjectSize.height )
continue;
scales.push_back((float)factor);
}
答案 0 :(得分:2)
CascadeClassifier::detectMultiScale
中使用的比例数取决于图像大小,原始训练窗口大小,minObjectSize
,maxObjectSize
和scaleFactor
参数。它循环遍历从1开始的所有比例,以scaleFactor
为增量,直到其中一个条件:
因此,有几种方法可以减少`CascadeClassifier :: detectMultiScale中使用的比例数:
maxObjectSize
参数设置为等于原始训练尺寸。它保证级联只使用1:1的比例。scaleFactor
参数设置为极大值(例如1000)。因此,不会使用1之后的下一个比例,因为窗口大小远大于图像大小。这对我来说是个肮脏的黑客。请务必调整minNeighbors
参数。如果你只使用一个刻度,你将得到很少的候选,所以要检测你需要的东西,你必须减少这个参数。