0

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)

最小最大値として2 つのオブジェクトを追加しただけcv::Sizeですが、正直なところよくわかりません。

  1. ドキュメントに ints としてリストされているのに、なぜ前の引数も Size() オブジェクトなのですか?
  2. 間違ったドキュメントを見ているのでしょうか、それともドキュメントを間違った方法で見ているのでしょうか?

C++: void CascadeClassifier::detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size())

ドキュメントから。

4

2 に答える 2

3

間違った引数を渡していたようです。これはうまくいきました:

body.detectMultiScale(gray,bodies,1.1,3,3,cv::Size(5,13),cv::Size(45,80));
于 2012-07-28T10:56:00.417 に答える