我正在查看objectdetect示例并尝试使用几个身体检测级联(* haarcascade_fullbody / haarcascade_upperbody / haarcascade_lowerbody,haarcascade_mcs_upperbody *)在我用人行桥相机拍摄的一些镜头上。到目前为止一切顺利,但这是一项要求很高的功能。
如果我通过最小/最大尺寸,我觉得可以运行得更顺畅,因为我的相机总是在同一个地方并且我找出了最小/最大边界框。不幸的是,我在尝试这样做时遇到了语法错误:
//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
个对象作为最大最大值,但说实话我不确定:
C ++:void CascadeClassifier :: detectMultiScale(const Mat&amp; image, 矢量&安培;对象,double scaleFactor = 1.1,int minNeighbors = 3,int flags = 0,Size minSize = Size(),Size maxSize = Size())
来自docs。
答案 0 :(得分:3)
我似乎传递了错误的论点。这很有效:
body.detectMultiScale(gray,bodies,1.1,3,3,cv::Size(5,13),cv::Size(45,80));
答案 1 :(得分:0)
在我的案例中面临同样的问题。以下行为我工作。如果您考虑,我只提供最小尺寸cv::Size(45,80)
。
我仍在调查其他参数,但目前正在进行中。
haar_cascade.detectMultiScale(gray,faces,1.1,3,3,cv::Size(45,80));