首页 > 代码库 > hog&svm
hog&svm
hog&svm的方法已经非常经典,广泛使用在多种行业,并且集成在了硬件中。应该说作为运动检测的一种重要方法,使用的情况还是非常广泛的。
(opencv自带的分类器)
int main()
{
Mat src = http://www.mamicode.com/imread( "1.png");
HOGDescriptor hog; //HOG特征检测器
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //设置SVM分类器为默认参数
vector<Rect> found, found_filtered; //矩形框数组
hog.detectMultiScale(src, found, 0, Size(8,8), Size(32,32), 1.05, 2); //对图像进行多尺度检测
cout<< "矩形个数:" <<found.size()<<endl;
//找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中
for(int i=0; i < found.size(); i++)
{
Rect r = found[i];
int j=0;
for(; j < found.size(); j++)
if(j != i && (r & found[j]) == r)
break;
if( j == found.size())
found_filtered.push_back(r);
}
cout<< "过滤后矩形的个数:" <<found_filtered.size()<<endl;
//画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整
for(int i=0; i<found_filtered.size(); i++)
{
Rect r = found_filtered[i];
r.x += cvRound(r.width*0.1);
r.width = cvRound(r.width*0.8);
r.y += cvRound(r.height*0.07);
r.height = cvRound(r.height*0.8);
rectangle(src, r.tl(), r.br(), Scalar(0,255,0), 3);
}
imwrite( "ImgProcessed.jpg",src);
namedWindow( "src",0);
imshow( "src",src);
waitKey(); //注意:imshow之后一定要加waitKey,否则无法显示图像
system( "pause");
}
这里体现出来的,主要就是对已经成功的分类器的使用方法。那么在这个hog&svm中,找到正确的hog特征,识别出正确的svm是最重要的。
效果很一般。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。