代码示例
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "opencv2/core/core.hpp"
#include"opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include <vector>
#include <stdio.h>
using namespace cv;
using namespace std;
//int main(int argc, char** argv){
// Mat img;
// vector<Rect> found, foundRect;
//
// //img = imread(argv[1]);
//if (argc != 2 || !img.data){
// printf("没有图片\n");
// return -1;
//}
int main()
{
Mat img;
vector<Rect> found, foundRect;
img = imread("test.png");
imshow("【原图】", img);
cout << "读进去图片了" << endl;
if (!img.data){
printf("没有图片\n");
return -1;
}
cout << "设置特征" << endl;
HOGDescriptor defaultHog;
defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
//进行检测
cout << "进行检验" << endl;
defaultHog.detectMultiScale(img, found);
//遍历found寻找没有被嵌套的长方形
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()){
foundRect.push_back(r);
}
cout << "寻找嵌套: " <<i<< endl;
}
//画长方形,圈出行人
for (int i = 0; i < foundRect.size(); i++){
Rect r = foundRect[i];
rectangle(img, r.tl(), r.br(), Scalar(0, 0, 255), 3);
cout << "画出方框: " << i << endl;
}
cout << "显示结果"<< endl;
namedWindow("检测行人", CV_WINDOW_AUTOSIZE);
imshow("检测行人", img);
waitKey(0);
return 0;
}