2015-05-14 25 views
0

如何强制OpenCV CascadeClassifier::detectMultiScale功能搜索只在1:1的规模?如何强制按1:1比例进行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); 
} 
+0

您可以设置最大尺寸。默认情况下,最小尺寸(取决于训练数据)通过比例因子增加,直到它不适合图像anymorw。 – Micka

回答

2

CascadeClassifier::detectMultiScale使用秤的数量取决于图像的大小,原始训练窗口大小,minObjectSizemaxObjectSizescaleFactor参数。遍历所有的鳞片开始在scaleFactor递增1,直到条件之一:

  • 当前窗口尺寸较大的图像尺寸
  • 当前窗口尺寸较大maxObjectSize

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

  1. 设置maxObjectSize参数等于原点训练有素的大小。它保证级联将只使用1:1的比例。
  2. scaleFactor参数设置为非常大的值(例如1000)。因此,1之后的下一个缩放比例将不会被使用,因为窗口大小远大于图像大小。这对我来说是肮脏的黑客攻击。

请确定您调好了minNeighbors参数。如果你只使用一个比例尺,你将得到很少的候选人,所以要检测你需要的东西,你必须减少这个参数。

+1

或者,您可以将'minObjectSize'和'maxObjectSize'设置为相同的值。 – cyriel

相关问题