如何在 1:1 规模上强制进行 detectMultiScale 搜索?

How to force detectMultiScale search on 1:1 scale?

如何强制 OpenCV CascadeClassifier::detectMultiScale 函数搜索仅在 1:1 规模上?

默认使用多少比例尺?

更新: 找到相关代码: 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);
}

CascadeClassifier::detectMultiScale 中使用的尺度数量取决于图像大小、原始训练的 window 大小、minObjectSizemaxObjectSizescaleFactor 参数。它以 scaleFactor 的增量循环遍历所有从 1 开始的标度,直到满足以下条件之一:

  • 当前 window 尺寸较大图像尺寸
  • 当前window尺寸较大maxObjectSize

所以有几种可能性可以减少`CascadeClassifier::detectMultiScale:

中使用的尺度数量
  1. maxObjectSize 参数设置为等于原始训练大小。它保证级联将仅使用 1:1 比例。
  2. scaleFactor参数设置为非常大的值(例如1000)。因此,将不会使用 1 之后的下一个比例,因为 window 尺寸比图像尺寸大得多。对我来说这是肮脏的黑客。

请务必调整 minNeighbors 参数。如果你只使用一个尺度,你会得到很少的候选人,所以要检测你需要的东西,你必须减少这个参数。