2015-05-14 22 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

相關問題