HOG+SVM+INRIAPerson数据集代码
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
//#include <opencv2/gpu/gpu.hpp>
#include <fstream>
#include <iomanip> #include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp" using namespace std;
using namespace cv; int main()
{
#if 0
Mat image;
image = imread("D:\\dataset\\temp\\6.png");
HOGDescriptor hog;
vector<float> v_feature;
hog.compute(image, v_feature, cv::Size(, ));
//hog.compute(image, v_feature, cv::Size(16, 16)); int featureVecSize = v_feature.size();
cout << "****************************************haha****************" << endl;
cout << featureVecSize<<endl;
#else
//***************************************************************************************************
// 初始化
//*************************************************************************************************** //char positivePath[256] = "D:\\dataset\\INRIAPerson\\Train\\pos\\";
//char negativePath[256] = "D:\\dataset\\INRIAPerson\\Train\\neg\\";
//char testPath[256] = "D:\\dataset\\INRIAPerson\\Test\\pos\\";
char positivePath[] = "D:\\dataset\\INRIAPerson\\train_64x128_H96\\pos\\";
char negativePath[] = "D:\\dataset\\INRIAPerson\\train_64x128_H96\\neg\\";
char testPath[] = "D:\\dataset\\INRIAPerson\\test_64x128_H96\\pos\\";
char classifierSavePath[] = "D:\\dataset\\INRIAPerson\\myResult"; int positiveSampleCount = ;
int negativeSampleCount = ;
//int positiveSampleCount = 100;
//int negativeSampleCount = 100; int totalSampleCount = positiveSampleCount + negativeSampleCount;
int testSampleCount = ; CvMat *sampleFeaturesMat = cvCreateMat(totalSampleCount, , CV_32FC1); //参数1764?
cvSetZero(sampleFeaturesMat);
CvMat *sampleLabelMat = cvCreateMat(totalSampleCount, , CV_32FC1);//样本标识
cvSetZero(sampleLabelMat); //CvMat *testFeaturesMat = cvCreateMat(testSampleCount, 94500, CV_32FC1); //参数1764? 正288,负453
CvMat *testFeaturesMat = cvCreateMat(, , CV_32FC1); //参数1764? 正288,负453
cvSetZero(testFeaturesMat);
CvMat *testLabelMat = cvCreateMat(testSampleCount, , CV_32FC1);//样本标识
cvSetZero(testLabelMat);
//float testLabelMat[288] = {0};
//Mat sampleFeaturesMat(); //***************************************************************************************************
// 正例的特征
//***************************************************************************************************
//positive文件读入
//ifstream fin(positivePath, ios::in);
//if (!fin)
//{
// cout << "positivePath can not open the file!" << endl;
// return -1;
//}
char positiveImage[];
string path;
string s_positiveImage;
for (int i = ; i < positiveSampleCount; i++)
{
//图片名修改
memset(positiveImage, '\0', sizeof(positiveImage));
sprintf(positiveImage, "%d.png", i+); //要改成.jpg吗
s_positiveImage = positiveImage;
path = positivePath + s_positiveImage; Mat image = imread(path);
if (image.data == NULL)
{
cout << "positive image sample load error: " << i << " " << path << endl;
system("pause");
continue;
}
//hog特征提取
//gpu::HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9); //貌似还有一些参数,重载了?
//HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9);
HOGDescriptor hog;
vector<float> v_feature;
hog.compute(image, v_feature, cv::Size(, ));
//hog.compute(image, v_feature, cv::Size(16, 16)); int featureVecSize = v_feature.size();
//cout << "****************************************haha****************" << endl;
//cout << featureVecSize<<endl;
//return 0;
for (int j = ; j<featureVecSize; j++)
{
//sampleFeaturesMat[i][j] = v_feature[j];
CV_MAT_ELEM(*sampleFeaturesMat, float, i, j) = v_feature[j]; //CV_MAT_ELEM什么意思
}
sampleLabelMat->data.fl[i] = ; //.fl[]是什么
cout << "positive" << i + << "is running..." << endl;
}
//fclose(fin);
//***************************************************************************************************
// 负例的特征
//***************************************************************************************************
//negative文件读入
//ifstream fin(negativePath, ios::in);
//if (!fin)
//{
// cout << "can not open the file!" << endl;
// return -1;
//}
char negativeImage[] = ""; //初始化吗
string s_negativeImage;
for (int i = ; i < negativeSampleCount; i++)
{
//图片名修改
//hog特征提取
memset(negativeImage, '\0', sizeof(negativeImage));
sprintf(negativeImage, "%d.png", i+); //要改成.jpg吗
s_negativeImage = negativeImage;
path = negativePath + s_negativeImage;
//cout << "********************************************************"<<endl;
//cout << path<<endl;
Mat image = imread(path);
if (image.data == NULL)
{
cout << "positive image sample load error: " << i << " " << path << endl;
system("pause");
continue;
}
//hog特征提取
//gpu::HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9); //貌似还有一些参数,重载了?
//HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9);
HOGDescriptor hog;
vector<float> v_feature;
hog.compute(image, v_feature, cv::Size(, )); int featureVecSize = v_feature.size();
//cout << "***************************lalala*****************************" << endl;
//cout << featureVecSize; for (int j = ; j<featureVecSize; j++)
{
CV_MAT_ELEM(*sampleFeaturesMat, float, positiveSampleCount +i, j) = v_feature[j]; //CV_MAT_ELEM什么意思
}
sampleLabelMat->data.fl[positiveSampleCount +i] = ; //.fl[]是什么
cout << "negative" << i + << "is running..." << endl;
} //**********************************************************************************************
// Linear SVM训练
//**********************************************************************************************
//设置参数
CvSVMParams params;
params.svm_type = SVM::C_SVC;
params.C = 0.01;
params.kernel_type = SVM::LINEAR;
//params.term_crit = TermCriteria(CV_TERMCRIT_ITER, (int)1e7, 1e-6);
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, , FLT_EPSILON); //训练
cout << "Starting training process" << endl;
CvSVM svm;
svm.train(sampleFeaturesMat, sampleLabelMat, Mat(), Mat(), params);
cout << "Finished training process" << endl;
//**********************************************************************************************
// 结果保存
//**********************************************************************************************
//classifierSavePath文件读入
//ifstream fin(classifierSavePath, ios::in);
//if (!fin)
//{
// cout << "positivePath can not open the file!" << endl;
// return -1;
//}
//svm.save(classifierSavePath);
//cvReleaseMat(&sampleFeaturesMat);
//cvReleaseMat(&sampleLabelMat);
//cout << "has saved succeeded! " << endl; //**********************************************************************************************
// 测试
//**********************************************************************************************
//test文件读入
//ifstream fin(testPath, ios::in);
//if (!fin)
//{
// cout << "can not open the file!" << endl;
// return -1;
//}
char testImage[] = ""; //初始化吗
string s_testImage;
for (int i = ; i < testSampleCount; i++)
{
//图片名修改
//hog特征提取
memset(testImage, '\0', sizeof(testImage));
sprintf(testImage, "%d.png", i+); //要改成.jpg吗
s_testImage = testImage;
path = testPath + s_testImage; Mat image = imread(path);
if (image.data == NULL)
{
cout << "positive image sample load error: " << i << " " << path << endl;
system("pause");
continue;
}
//hog特征提取
//gpu::HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9); //貌似还有一些参数,重载了?
//HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9);
HOGDescriptor hog;
vector<float> v_feature;
hog.compute(image, v_feature, cv::Size(, )); int featureVecSize = v_feature.size();
//cout << "***************************lalala*****************************" << endl;
//cout << featureVecSize;
for (int j = ; j<featureVecSize; j++)
{
//CV_MAT_ELEM(*testFeaturesMat, float, i, j) = v_feature[j]; //CV_MAT_ELEM什么意思
CV_MAT_ELEM(*testFeaturesMat, float, , j) = v_feature[j]; //CV_MAT_ELEM什么意思
}
float response = svm.predict(testFeaturesMat);
testLabelMat->data.fl[i] = response; //.fl[]是什么
//testLabelMat[i] = response;
}
float right = ;
for (int i = ; i < testSampleCount; i++)
{
if (testLabelMat->data.fl[i] == )
//if (testLabelMat[i] == 1)
{
right++;
}
}
float radio = right / testSampleCount;
cout << "the radio of the train is:" << radio << endl;
#endif
return ;
}
HOG+SVM+INRIAPerson数据集代码的更多相关文章
- python实现HOG+SVM对CIFAR-10数据集分类(上)
本博客只用于学习,如果有错误的地方,恳请指正,如需转载请注明出处. 看机器学习也是有一段时间了,这两天终于勇敢地踏出了第一步,实现了HOG+SVM对图片分类,具体代码可以在github上下载,http ...
- 第十八节、基于传统图像处理的目标检测与识别(HOG+SVM附代码)
其实在深度学习中我们已经介绍了目标检测和目标识别的概念.为了照顾一些没有学过深度学习的童鞋,这里我重新说明一次:目标检测是用来确定图像上某个区域是否有我们要识别的对象,目标识别是用来判断图片上这个对象 ...
- Hog SVM 车辆 行人检测
HOG SVM 车辆检测 近期需要对卡口车辆的车脸进行检测,首先选用一个常规的检测方法即是hog特征与SVM,Hog特征是由dalal在2005年提出的用于道路中行人检测的方法,并且取的了不错的识别效 ...
- 利用HOG+SVM实现行人检测
利用HOG+SVM实现行人检测 很久以前做的行人检测,现在稍加温习,上传记录一下. 首先解析视频,提取视频的每一帧形成图片存到磁盘.代码如下 import os import cv2 videos_s ...
- HOG特征原理及代码实现
HOG特征原理 HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子. 它通过计算和统计 ...
- HoG SVM 目标检测分析
前一段时间开始了解HoG跟SVM行人识别,看了很多包括Dalal得前辈的文章及经验分享,对HoG理论有了些初步的认识. HoG 的全称是 Histogram of Oriented Gradient, ...
- HOG + SVM(行人检测, opencv实现)
HOG+SVM流程 1.提取HOG特征 灰度化 + Gamma变换(进行根号求解) 计算梯度map(计算梯度) 图像划分成小的cell,统计每个cell梯度直方图 多个cell组成一个block, 特 ...
- 【目标检测】基于传统算法的目标检测方法总结概述 Viola-Jones | HOG+SVM | DPM | NMS
"目标检测"是当前计算机视觉和机器学习领域的研究热点.从Viola-Jones Detector.DPM等冷兵器时代的智慧到当今RCNN.YOLO等深度学习土壤孕育下的GPU暴力美 ...
- hog+svm+检测人(代替默认的参数)
#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui. ...
随机推荐
- [ios]安装CocoaPods及使用详解
最新 macOS Sierra 10.12.3 安装CocoaPods及使用详解 http://www.jianshu.com/p/b64b4fd08d3c CocoaPods的安装以及遇到的坑 ht ...
- 爬虫框架pyspider的使用
j概要:了解了爬虫的基础知识后,接下来我们来使用框架来写爬虫,用框架会使我们写爬虫更加简单,接下来我们来了解一下,pyspider框架的使用,了解了该框架,妈妈再也不用担心我们的学习了. 前期准备: ...
- URAL 1303 Minimal Coverage
URAL 1303 思路: dp+贪心,然后记录路径 mx[i]表示从i开始最大可以到的位置 sufmx[i]表从1-i的某个位置开始最大可以到达的位置 比普通的贪心效率要高很多 代码: #inclu ...
- js事件轮询机制
console.log(1) setTimeout(function(){ console.log(2) },0); console.log(3) 毫无疑问:运行结果是1 3 2 也就是说:setTi ...
- xhr文件类型说明
2017-08-08 18:31:08 xhr : XML HTTP Request,是一种在后台与服务器进行交互的数据.这意味着可以在不加载整个网页的情况下,对网页中的部分内容进行更新. 这是Aja ...
- SVN同步版本库与网站目录
如何创建SVN版本库及同步文件到WEB目录 来源:空谷 一 安装与配置SVN 1.安装subversion centos: yum install subversion ubuntu: apt-get ...
- (转)HapMap简介
1.人类基因组的HapMap和国际HapMap计划 (1)何谓HapMap HapMap是Haplotype Map 的简称,Haplo意为单一,在基因组中专指来自父母的一对染色体中的一条.Haplo ...
- 3-20 标准库:find库; 学习编程语言3节课(大多是旧识,全*栈)3-21 面向对象. Percent Strings; 元编程和Rails的相互理解
Find The Find module supports the top-down traversal of a set of file paths.(一系列文件的路径的遍历) find(*path ...
- Jersey 2.x 基于 Servlet 的服务器端应用
下面的依赖通常应用到应用服务器上(servlet 容器),同时这个应用服务器上没有整合任何 JAX-RS 的实现. 因此,这个应用服务器需要包含有 JAX-RS API 和 Jersey 实现,同时部 ...
- Java网络编程和NIO详解8:浅析mmap和Direct Buffer
Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NI ...