OpenCV人形检测Hog
#include "iostream"
#include "queue"
using namespace std;
#include "opencv2/opencv.hpp"
#include "Windows.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
using namespace cv; int main()
{
try{ IplImage *pFrame = NULL;
CvCapture *pCapture = NULL;
//pCapture = cvCreateCameraCapture(-1);
//pCapture = cvCaptureFromCAM(0);
pCapture = cvCaptureFromFile("C:\\C_C++ code\\Photo and video\\TextVideo2.flv");
//pCapture = cvCaptureFromFile("C:\\C_C++ code\\Photo and video\\TextVideo1.flv");
if (!pCapture)
{
cout << "File opened fail..." << endl;
return -;
} Mat img;
HOGDescriptor hog;
Rect r;
int nNum = ;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
vector<Rect> found,found1;
int i, j;
char str[];
while (pFrame = cvQueryFrame(pCapture))
{
nNum++;
Mat img = cvarrToMat(pFrame, ); //IplImage turn into Mat if (nNum >= )
{
//进行检测
hog.detectMultiScale(img, found); found1.clear();
//-------------------去除嵌套的矩形框------------------------
for (i = ; i < found.size(); i++)
{
r = found[i];
for (j = ; j < found.size(); j++)
{
if ( i != j && ((r&found[j]) == r) )
{
break;
}
}
if (j == found.size())
{
found1.push_back(r);
}
}
//画长方形 框出行人 for (i = ; i < found1.size(); i++)
{
r = found1[i];
rectangle(img, r, Scalar(, , ), );
}
nNum = ;
} for (int i = ; i < found1.size(); i++)
{
r = found1[i];
rectangle(img, r, Scalar(, , ), );
}
sprintf(str, "The track count is: %d", found1.size()); putText(img, str, cvPoint(, ), CV_FONT_HERSHEY_PLAIN, 0.8,CV_RGB(, , ),,); imshow("Track People", img);
if (cvWaitKey() >= )
break;
}
}
catch (exception &e)
{
cout << e.what() << endl;
} return ;
}
效果:

图片人形测试:
#include "iostream"
#include "queue"
using namespace std;
#include "opencv2/opencv.hpp"
#include "Windows.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
int main(int argc, char** argv){
Mat img;
vector<Rect> found; img = imread("C:\\C_C++ code\\Photo and video\\text006.jpg"); HOGDescriptor defaultHog;
defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //进行检测
defaultHog.detectMultiScale(img, found); //画长方形,框出行人
for (int i = ; i < found.size(); i++){
Rect r = found[i];
rectangle(img, r, Scalar(, , ), );
}
namedWindow("检测行人", CV_WINDOW_AUTOSIZE);
imshow("检测行人", img); waitKey(); return ;
}

边框嵌套去重:
int main(int argc, char** argv){
Mat img;
vector<Rect> found, foundRect;
img = imread("C:\\C_C++ code\\Photo and video\\text007.jpg");
HOGDescriptor defaultHog;
defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
//进行检测
defaultHog.detectMultiScale(img, found);
//遍历found寻找没有被嵌套的长方形
for (int i = ; i < found.size(); i++){
Rect r = found[i];
int j = ;
for (; j < found.size(); j++){
//如果时嵌套的就推出循环
if (j != i && (r & found[j]) == r)
break;
}
if (j == found.size()){
foundRect.push_back(r);
}
}
//画长方形,圈出行人
for (int i = ; i < foundRect.size(); i++){
Rect r = foundRect[i];
rectangle(img, r.tl(), r.br(), Scalar(, , ), );
}
namedWindow("检测行人", CV_WINDOW_AUTOSIZE);
imshow("检测行人", img);
waitKey();
return ;
}
int main()
{
Mat image = imread("C:\\C_C++ code\\Photo and video\\text007jpg");
imshow("hog", image);
if (image.empty())
{
cout << "read image failed" << endl;
}
// 1. 定义HOG对象
HOGDescriptor hog(Size(,), Size(, ), Size(, ), Size(, ), ); // 2. 设置SVM分类器
hog.setSVMDetector(HOGDescriptor::getDaimlerPeopleDetector()); // 采用已经训练好的行人检测分类器 // 3. 在测试图像上检测行人区域
std::vector<cv::Rect> regions;
hog.detectMultiScale(image, regions, , cv::Size(, ), cv::Size(, ), 1.05, ); // 显示
for (size_t i = ; i < regions.size(); i++)
{
cv::rectangle(image, regions[i], cv::Scalar(, , ), );
} cv::imshow("hog", image);
cv::waitKey(); return ;
}
OpenCV人形检测Hog的更多相关文章
- OpenCV:OpenCV目标检测Hog+SWindow源代码分析
参考文章:OpenCV中的HOG+SVM物体分类 此文主要描述出HOG分类的调用堆栈. 使用OpenCV作图像检测, 使用HOG检测过程,其中一部分源代码如下: 1.HOG 检测底层栈的检测计算代码: ...
- opencv直线检测在c#、Android和ios下的实现方法
opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...
- OPENCV条形码检测与识别
条形码是当前超市和部分工厂使用比较普遍的物品,产品标识技术,使用摄像头检测一张图片的条形码包含有两个步骤,第一是定位条形码的位置,定位之后剪切出条形码,并且识别出条形码对应的字符串,然后就可以调用网络 ...
- OpenCV矩形检测
OpenCV矩形检测 需求:提取图像中的矩形,图像存在污染现象,即矩形区域不是完全规则的矩形. 思路一:轮廓法 OpenCV里提取目标轮廓的函数是findContours,它的输入图像是一幅二值图像, ...
- keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)
引自:http://blog.csdn.net/sinat_26917383/article/details/72885715 人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节 ...
- OpenCV绘制检测结果
OpenCV绘制检测结果 opencv rtcp timestamp 一.介绍 由于在验证阶段,使用FPGA时我们的算法检测速度很慢,没法直接在主流上进行绘图,否则的话,主流就要等待算法很久才能 ...
- OpenCV中基于HOG特征的行人检测
目前基于机器学习方法的行人检测的主流特征描述子之一是HOG(Histogram of Oriented Gradient, 方向梯度直方图).HOG特征是用于目标检测的特征描述子,它通过计算和统计图像 ...
- opencv行人检测里遇到的setSVMDetector()问题
参考了博客http://blog.csdn.net/carson2005/article/details/7841443 后,自己动手后发现了一些问题,博客里提到的一些问题没有解决 ,是关于为什么图像 ...
- 人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)
1.Easily Create High Quality Object Detectors with Deep Learning 2016/10/11 http://blog.dlib.net/201 ...
随机推荐
- mysql主从复制 转
mysql服务器的主从配置,这样可以实现读写分离,也可以在主库挂掉后从备用库中恢复.需要两台机器,安装mysql,两台机器要在相通的局域网内,可以分布在不同的服务器上,也可以在一台服务器上启动多个服务 ...
- Tengine 常用模块使用介绍
Tengine 和 Nginx Tengine简介 从2011年12月开始:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能 和特性. ...
- CentOS下crond定时任务详细介绍
目录 1.定时任务crond介绍... 2.crond定时任务限权... 3.Crontab用法... 4.Crontab命令的书写格式... 5.定时服务器时间同步... 6.写定时任务注意点.. ...
- PHP----Ajax异步请求
需要两个PHP页面:1.php是发出请求和接受请求结果的.2.php是处理请求的结果. 1.php中代码: <a href="#" onclick="sendAja ...
- (自用)专业排版套装:CTeX + TeXStudio
\documentclass[UTF8,landscape]{ctexart}%UTF8,ctexart中文支持,landscape横向版面 \usepackage{tikz}%画图 \usepack ...
- 斗鱼的sidebar的实现简陋的demo
斗鱼的sidebar的实现简陋的demo <!DOCTYPE html> <html> <head lang="en"> <meta ch ...
- Apple Instruments
启动Xcode,选择Xcode > Open Developer Tool > Instruments. 如果无法选择当前设备,请尝试重启设备. 将设备设置为Use for develop ...
- @Autowired与@Resource的区别
1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必 ...
- Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类)
概述 Host 是应用程序域级的单例,代表了Orchard应用程序.其处理应用程序生命周期中的初始化.BeginRequest事件.EndRequest事件等. 可以简单理解为HttpApplicat ...
- 【9-6】Centos学习笔记
linux文件系统结构 常用技巧 快捷键启动终端 su命令,使用超级用户登陆 visudo :编辑用户权限 tar xf 文件名:解压文件 Vim编辑器 Tips yum包管理:Yum(全称为 Yel ...