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

26 篇文章 21 订阅
20 篇文章 5 订阅

代码示例

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

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值