`

opencv视频行人检测2(HOG+SVM)

阅读更多
//===========================================================
/*
先用VideoCapture读取视频,然后在图片中获取一帧的图片,
对这张图片进行行人检测,再画矩形框。
最后设置一个循环,不断地从视频中获取图片。
行人检测,不太准确。而且因为检测每一帧的图片,所以不能实时检测,有卡顿
opencv2.4+vs2017
使用别人的xml文件(xml是opencv2的,所以用opencv3调用它就出错。)
*/
//===========================================================
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp> 
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/objdetect.hpp> 
#include<iostream>

using namespace std;
using namespace cv;

//定义分类器,加载xml文件
CascadeClassifier faceCascade;

//定义一个方法detectAndDraw,两个参数faceCascade和img
void detectAndDraw(CascadeClassifier &faceCascade, Mat &img)
{
	//矩形框数组
	vector<Rect> found, found_filtered;
	//调用GetTickCount()函数返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数(可以不要)
	double t = (double)getTickCount();
	//多尺度检测目标,返回的矩形从大到小排列
	faceCascade.detectMultiScale(img, found, 1.1, 2, 0
		//|CASCADE_FIND_BIGGEST_OBJECT
		//|CASCADE_DO_ROUGH_SEARCH
		| CASCADE_SCALE_IMAGE,
		Size(30, 30));
	//每测一次的毫秒数
	t = (double)getTickCount() - t;
	//输出getTickFrequency()函数:返回每秒的计时周期数
	//cout << "detection time = " << (t*1000. / cv::getTickFrequency()) << " ms" << endl;
	//cout << "detection result = " << found.size() << " Rects" << 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 << "Real detection result = " << found_filtered.size() << " Rects" << endl;
	//画出矩形框
	for (int i = 0; i<found_filtered.size(); i++)
	{
		Rect r = found[i];
		rectangle(img, r.tl(), r.br(), Scalar(0, 255, 0), 3);
	}
}


int main(int argc, char **argv)
{
	//HOG特征检测器  
	//HOGDescriptor hog;
	//设置分类器
	//hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

	//faceCascade.load("D://XR//cascades.xml");
	faceCascade.load("D://XR//hogcascade_pedestrians.xml");
	
	//通过VideoCaptrue类对视频进行读取操作以及调用摄像头										   
	VideoCapture vc;

	Mat frame;
	//加载视频
	//vc.open("D:\\XR\\xingren.avi");
	vc.open("D:\\XR\\test.avi");
	//如果打不开视频,则。。。。
	if (!vc.isOpened())
		throw runtime_error(string("can't open video file: "));
	//
	while (1)
	{
		vc >> frame;//等价于vc.read(frame);从视频中获取图片
		if (frame.empty()) //如果某帧为空则退出循环
			break;
		//调用detectAndDraw()函数,并传参
		detectAndDraw(faceCascade, frame);
		//创建窗口,显示结果图片
		namedWindow("frame",0);
		resizeWindow("frame", 960, 540);
		imshow("frame", frame);

		//这个函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则接续等待(循环)
		int c = waitKey(vc.isOpened() ? 30 : 0) & 255;
		if (c == 'q' || c == 'Q' || c == 27)
			break;
		//waitKey(0);//每帧延时20毫秒

		/*while (waitKey(10) != 27);
		destroyWindow("frame");*/
	}
	//vc.release();//释放资源
	return 0;
}

xml文件和视频文件都提供给大家,可以自己试试。

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    opencv行人检测4(HOG+SVM)

    OpenCV行人检测4(HOG+SVM)是一个利用计算机视觉技术进行行人检测的教程,它主要依赖于两种关键算法:Histogram of Oriented Gradients (HOG) 和 Support Vector Machines (SVM)。在这个主题中,我们将深入探讨这两...

    OPENCV行人检测HOG+SVM检测视频中是否有人.zip资源matlab opencv运动目标检测程序资料

    OPENCV行人检测HOG+SVM检测视频中是否有人.zip资源matlab opencv运动目标检测程序资料OPENCV行人检测HOG+SVM检测视频中是否有人.zip资源matlab opencv运动目标检测程序资料OPENCV行人检测HOG+SVM检测视频中是否有人....

    基于C++的通过HOG+SVM训练进行行人检测算法代码实现

    行人检测是计算机视觉领域中的一个核心任务,常用于智能交通、视频监控以及机器人导航等应用场景。本项目聚焦于使用C++编程语言实现基于HOG(Histogram of Oriented Gradients,方向梯度直方图)特征和SVM(Support ...

    opencv视频行人检测1(HOG+SVM)

    标题 "opencv视频行人检测1(HOG+SVM)" 涉及到的是计算机视觉领域的一个经典应用,即使用OpenCV库进行行人检测。OpenCV是一个开源的计算机视觉和机器学习软件库,提供了丰富的功能来处理图像和视频数据。在这个项目...

    OPENCV行人检测HOG+SVM检测视频中是否有人.zip

    OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人

    hog.svm_hog_hogsvm_HOG+SVM_SVM小狮子_hog+SVM_

    在这个特定的案例中,"hog.svm_hog_hogsvm_HOG+SVM_SVM小狮子_hog+SVM_"标题暗示了我们正在处理的是一个针对小狮子的分类任务。小狮子的图像可能具有丰富的纹理和形状变化,这使得HOG特征尤为适用。 在"hog.svm.py...

    python行人检测利用HOG+SVM训练模型,检测行人

    本项目专注于使用Python实现行人检测,结合HOG(Histogram of Oriented Gradients)特征和SVM(Support Vector Machine)分类器进行训练和检测。下面将详细介绍这两个核心技术以及如何将它们结合应用于行人检测。 ...

    HOG+SVM代码

    通过这个过程,我们可以构建一个基于HOG+SVM的图像分类系统,例如行人检测。OpenCV提供了方便的接口,使得开发者能够快速实现这一技术。需要注意的是,实际应用中还需要考虑优化和调参,以适应不同的应用场景和需求...

    opencv_目标检测_OPENCV行人检测HOG+SVM检测视频中是否有人_HOG_SVM_行人检测_人体检测_VC++

    文件列表中的"OPENCV目标跟踪_opencv_目标检测_OPENCV行人检测HOG+SVM检测视频中是否有人_HOG_SVM_行人检测_人体检测_VC++"很可能包含了源代码、数据集、配置文件等资源,帮助用户理解并实现这一功能。 总之,...

    HOG+SVM行人检测算法

    HOG+SVM算法由Navneet Dalal和Bill Triggs在2005年的CVPR会议上提出,成为行人检测领域的里程碑式算法。HOG,即Histogram of Oriented Gradients,是一种用于特征提取的技术,它通过计算和积累图像中像素块的梯度...

    OPENCV目标跟踪OPENCV行人检测HOG+SVM检测视频中是否有人

    以上就是根据给定文件信息所能提取到的关于OpenCV目标跟踪、行人检测以及HOG+SVM在视频中检测行人存在的知识点。这些技术的结合为计算机视觉领域的实时监控和智能分析提供了强大的技术支持。随着技术的发展和改进,...

    HOG+SVM (已经验证)

    在HOG+SVM的应用中,OpenCV提供方便的接口来实现HOG特征的计算和SVM模型的训练与预测。 综上所述,HOG+SVM的结合是计算机视觉领域中的一个强大工具,尤其在目标检测任务中表现出高效率和准确性。OpenCV库为开发者...

    自己hog+svm训练过程

    标题中的“自己hog+svm训练过程”指的是使用Histogram of Oriented Gradients (HOG) 特征和Support Vector Machine (SVM) 分类器进行行人检测的实践过程。HOG特征是计算机视觉领域中用于物体检测,特别是行人检测的...

    基于OpenCV 通过HOG+SVM训练INRIAPerson行人数据库进行行人检测源码+使用文档+全部资料(优秀项目)

    基于OpenCV 通过HOG+SVM训练INRIAPerson行人数据库进行行人检测源码+使用文档+全部资料(优秀项目)基于OpenCV 通过HOG+SVM训练INRIAPerson行人数据库进行行人检测源码+使用文档+全部资料(优秀项目) 【备注】 1、...

    HOG+SVM实现数字识别

    标题中的“HOG+SVM实现数字识别”是指利用Histogram of Oriented Gradients(方向梯度直方图)特征和Support Vector Machines(支持向量机)算法进行数字的检测与识别。这一技术常应用于图像处理和计算机视觉领域,...

    HOG+SVM训练集和测试集分开写的

    标题中的“HOG+SVM训练集和测试集分开写的”是指使用Histogram of Oriented Gradients(HOG)特征和Support Vector Machine(SVM)分类器进行物体检测时,将数据集划分为训练集和测试集两个部分。这种方法是机器学习...

    hog+svm行人检测分类器训练

    标题中的“hog+svm行人检测分类器训练”指的是在计算机视觉领域中,使用Histogram of Oriented Gradients(HOG)特征和Support Vector Machines(SVM)算法进行行人检测的训练过程。HOG是一种用于物体检测的特征提取...

Global site tag (gtag.js) - Google Analytics