java图片识别人像计算人头数_人头检测代码示例:SVM+HOG

本文介绍了使用SVM和HOG特征进行人头检测的方法,包括预处理、训练和检测步骤。通过训练1416个人头正样本和1957个负样本,作者展示了如何在Java环境下利用OpenCV实现SVM分类器的训练,并给出了检测代码示例。尽管多尺度HOG计算速度较慢,但单尺度检测在人头统计方面表现出一定效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

人头检测代码示例:SVM+HOG

来源:互联网

作者:佚名

时间:2015-03-17 09:17

网上关于HOG的理解以及结合SVM做检测的源码很多,这里我结合自己的理解对他们做一个综述和总结。

最近在做人头统计方面的研究,尝试了多种办法,其中包括Adaboost+Haar特征、HOG特征+线性SVM两大模型。SVM+HOG的模型之前多数被应用于行人检测,,我在做人头统计的过程中考虑到人头的边缘形状比较明显,图像梯度比较容易提取,所以将该方法搬到人头统计上来,效果还不错。不足之处是多尺度的HOG计算太慢了,难以达到实时性要求,所以我采用的多数是单尺度检测(64*64的固定窗口大小)。

我现在的工作只是做了个入门,本文意在抛砖引玉,希望感兴趣的小伙伴能够一起研究。

1、预处理

从视频中采集了1416个人头正样本,以及1957个负样本。正样本主要就是人头部(头发)的图像,负样本是不包括人头目标的图像。然后将它们统一归一化到64*64的大小(我这里为了简化训练过程,将人头图像的大小设置为和窗口大小一致)。

af4c36e2754ce374121914de2c1a5bd7.png

2、人头训练

开发环境是winxp+vs2008+opencv2.3.1。训练代码主要包括MySVM.h,global.h和global.cpp三个文件。其中MySVM.h是SVM类定义文件,global.h和global.cpp分别是全局函数声明和定义文件。

(1)MySVM.h如下:

#pragma once

#ifndef _MYSVM_H_

#define _MYSVM_H_

#include

#include

#include

#include

using namespace cv;

class MySVM: public CvSVM

{

public:

int get_alpha_count()

{

return this->sv_total;

}

int get_sv_dim()

{

return this->var_all;

}

int get_sv_count()

{

return this->decision_func->sv_count;

}

double* get_alpha()

{

return this->decision_func->alpha;

}

float** get_sv()

{

return this->sv;

}

float get_rho()

{

return this->decision_func->rho;

}

};

#endif(2)global.h如下:

#include "MySVM.h"

#include

#include

#include

using namespace std;

//函数名:Train

//函数功能:SVM训练每张图片的HOG特征

//参数说明:

//const char* positivePath:正样本路径

//int pCount:正样本个数

//const char* negativePath:负样本路径

//int nCount:负样本个数

//const char* classifierSavePath:分类器保存路径

//const char* detectorSavePath:检测器保存路径

//返回bool:训练是否成功(true:成功,false:失败)

bool Train(const char* positivePath, int pCount, const char* negativePath, int nCount,

const char* classifierSavePath, const char* detectorSavePath);

//函数名:CalDimension

//函数功能:计算每张图片的HOG特征维度

//参数说明:

//CvSiz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值