2012-07-27 5 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. 왜 이전의 인수를 도큐멘트 이 int로 나열되면 Size() 객체도 마찬가지입니까?
  2. 내가 잘못된 문서를 보거나 문서에서 을 잘못보고 있습니까?

C++ : 보이드 CascadeClassifier :: detectMultiScale (CONST 매트 & 화상 벡터 & 목적, 이중 scaleFactor와 = 1.1, 크기) (INT, 3 = 플래그 = 0, 크기 MINSIZE = 크기 minNeighbors에서 INT maxSize = Size())

docs.

+0

왜 'minNeighbors' 및'flags'에'cv :: Size'를 전달합니까? – Mohammad

+0

그 질문 중 하나입니다. 간단히 [objectdetect.cpp] (https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/tutorial_code/objectDetection/objectDetection.cpp?rev=6483) 샘플의 호출을 복사했습니다. –

+0

주된 이유는 setter 메소드를 찾지 못했던'minSize','maxSize' 인수를 얻는 것이므로 생성자가 유일한 액세스 포인트 인 것처럼 보입니다. –

답변

3

잘못된 인수를 전달하는 것 같습니다. 작동 방식 :

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

어디에서 파이썬 코드를 찾을 수 있습니까? –

+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' –

+0

예, 프로그램을 만들었습니다. . 이제는 모두 좋다. :) –

0

필자의 경우 동일한 문제가 있습니다. 다음 라인은 나를 위해 일했다. 당신이 고려한다면, 나는 최소 크기 cv::Size(45,80)만을 제공하고 있습니다. 다른 매개 변수에 대해 조사 중이지만 현재 작동 중입니다.

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