编译了一下还在开发中的opencv 试了下里面有一个2012年cvpr的算法 pedestrian detect 论文《pedestrian detection at 100 frames per second》
废话少说直接上代码
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv2\core\core.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\softcascade.hpp>
int main( int argc, char** argv )
{
//load image
cv::Mat img=cv::imread("walkman.jpg");
cv::softcascade::Detector soft;
cv::FileStorage fs("soft-cascade-17.12.2012.xml", cv::FileStorage::READ);
bool ok = soft.load(fs.getFirstTopLevelNode());
if ( ! ok ) {
std::cerr << "cascade load error!" << std::endl;
return -1;
}
std::vector<cv::Rect> rois;
rois.push_back(cv::Rect(0,0,img.cols,img.rows)); //for now, the whole img
std::vector<cv::softcascade::Detection> softobj; // results
soft.detect(img,rois,softobj);
for ( size_t j=0; j<softobj.size(); ++j ) // lame visualization ..
{
cv::Rect R(softobj[j].x, softobj[j].y, softobj[j].w, softobj[j].h);
cv::rectangle(img,R,cv::Scalar(softobj[j].confidence*3-128 ,0,0),2);
}
cv::namedWindow("image", CV_WINDOW_NORMAL);
cv::imshow("image", img);
cv::waitKey();
return 0;
}
最后输出结果可以用groupRectangles筛选一下
然后结果图看一下 我觉得效果可能跟数据集有关 毕竟只有两个Octave 有时间的话会详细说下这个算法