如何以1:1比例强制detectMultiScale搜索?

时间:2015-05-14 14:49:16

标签: opencv computer-vision object-detection

如何仅以1:1比例强制执行OpenCV CascadeClassifier::detectMultiScale功能搜索?

默认使用多少刻度?

UPD: 找到关联代码: https://github.com/Itseez/opencv/blob/cc92cd07e8d6a54dfd57d5f74c3d4e05b1d956af/modules/objdetect/src/cascadedetect.cpp

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);
}

1 个答案:

答案 0 :(得分:2)

CascadeClassifier::detectMultiScale中使用的比例数取决于图像大小,原始训练窗口大小,minObjectSizemaxObjectSizescaleFactor参数。它循环遍历从1开始的所有比例,以scaleFactor为增量,直到其中一个条件:

  • 当前窗口大小是更大的图像大小
  • 当前窗口大小maxObjectSize

因此,有几种方法可以减少`CascadeClassifier :: detectMultiScale中使用的比例数:

  1. maxObjectSize参数设置为等于原始训练尺寸。它保证级联只使用1:1的比例。
  2. scaleFactor参数设置为极大值(例如1000)。因此,不会使用1之后的下一个比例,因为窗口大小远大于图像大小。这对我来说是个肮脏的黑客。
  3. 请务必调整minNeighbors参数。如果你只使用一个刻度,你将得到很少的候选,所以要检测你需要的东西,你必须减少这个参数。