【OpenCV】如何使用HOG特征对行人检测

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_15698613/article/details/99758018

代码示例

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_15698613/article/details/99758018