2012-07-27 159 views
0

我正在查看objectdetect示例,並用人體檢測級聯(* haarcascade_fullbody/haarcascade_upperbody/haarcascade_lowerbody,haarcascade_mcs_upperbody *)對我用人行天橋攝像頭拍攝的一些素材進行了試用。到目前爲止這麼好,但它是一個苛刻的功能。OpenCV 2.4 CascadeClassified detectMultiScale參數

我雖然認爲可能會運行更順暢,如果我通過最小/最大尺寸,因爲我的相機總是在同一個地方,我找出最小/最大的邊界框。不幸的是我試圖這樣做時碰到了語法錯誤:

//my call 
body.detectMultiScale(gray, bodies, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, cv::Size(30, 30),cv::Size(0,0),cv::Size(5,13),cv::Size(45,80)); 
//errors: 
main.cpp:43: error: no matching function for call to 'cv::CascadeClassifier::detectMultiScale(cv::Mat&, std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, double, int, int, cv::Size, cv::Size, cv::Size, cv::Size)' 
/opt/local/include/opencv2/objdetect/objdetect.hpp:383: note: candidates are: virtual void cv::CascadeClassifier::detectMultiScale(const cv::Mat&, std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, double, int, int, cv::Size, cv::Size) 
/opt/local/include/opencv2/objdetect/objdetect.hpp:393: note:     virtual void cv::CascadeClassifier::detectMultiScale(const cv::Mat&, std::vector<cv::Rect_<int>, std::allocator<cv::Rect_<int> > >&, std::vector<int, std::allocator<int> >&, std::vector<double, std::allocator<double> >&, double, int, int, cv::Size, cv::Size, bool) 

我只是增加了兩個cv::Size對象爲最小最大,但說實話,我不知道:

  1. 爲什麼以前的論點Size()對象以及文檔 將它們列爲整數?
  2. 我是以錯誤的方式看錯文檔或者在文檔 上?

C++:空隙CascadeClassifier :: detectMultiScale(常量墊&圖像, 矢量&目的,雙比例因子= 1.1,整數minNeighbors = 3,整數 標誌= 0,大小minSize屬性=尺寸(),尺寸maxSize = Size())

from docs。

+0

你爲什麼要將'cv :: Size'傳遞給'minNeighbors'和'flags'? – Mohammad 2012-07-28 00:01:40

+0

這是我的問題之一。我只是複製了[objectdetect.cpp](https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/tutorial_code/objectDetection/objectDetection.cpp?rev=6483)示例中的調用 – 2012-07-28 08:44:43

+0

主要原因是到達'minSize','maxSize'參數,我還沒有找到一個setter方法,所以構造函數似乎是唯一的訪問點。 – 2012-07-28 08:51:33

回答

3

看來我傳遞了錯誤的觀點。這工作:

body.detectMultiScale(gray,bodies,1.1,3,3,cv::Size(5,13),cv::Size(45,80)); 
+0

我在哪裏可以找到相同的Python代碼? – 2014-06-25 04:37:30

+0

您是否嘗試過[文檔](http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html?highlight=detectmultiscale#cascadeclassifier-detectmultiscale)? 'Python:cv.HaarDetectObjects(image,cascade,storage,scale_factor = 1.1,min_neighbors = 3,flags = 0,min_size =(0,0))→detectedObjects' – 2014-06-25 11:05:10

+0

是的,我做了這個程序,忘了我已經評論了。現在都很好。 :) – 2014-06-25 11:06:12

0

面對同樣的問題在我的情況。以下線爲我工作。如果您考慮,我只提供最小尺寸cv::Size(45,80)。 我仍在調查其他參數,但目前正在使用。

haar_cascade.detectMultiScale(gray,faces,1.1,3,3,cv::Size(45,80));