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. ...
随机推荐
- 阿里官方Java代码规范标准
阿里官方Java代码规范标准<阿里巴巴Java开发手册 终极版 v1.3.0>下载 https://www.cnblogs.com/han-1034683568/p/7680354.htm ...
- mysql 问题 Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb
异常错误:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.c ...
- python模块——random模块(简单验证码实现)
实现一个简单的验证码生成器 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # Usage: 验证 ...
- Windows 10 设置 Java 环境变量
首先你需要在我的电脑中打开,找到环境变量属性. 找到环境变量属性 找到环境变量属性后单击将会看到下面的设置界面. 在这个界面中设置高级系统设置. 环境变量 在弹出的界面中选择设置环境变量. 系统变量 ...
- BOM对象思维导图
- laravel 懒加载
故事背景是什么呢? 目录大家都知道吧,一般有几个层级,根据公司需求,要将目录以树的形式展示出来,为了提高访问速度,这些目录数据要一次性读取出来的.这样的话就涉及到了查询,优化查询次数是一个很关键的事情 ...
- 『OpenCV3』简单图片处理
cv2和numpy深度契合,其图片读入后就是numpy.array,只不过dtype比较不常用而已,支持全部数组方法 数组既图片 import numpy as np import cv2 img = ...
- Neo4j视频教程 Neo4j 图数据库视频教程
课程名称 课程发布地址 地址: 腾讯课堂<Neo4j 图数据库视频教程> https://ke.qq.com/course/327374?tuin=442d3e14 作者 庞国明,< ...
- python-day3笔记
1.通信是软件(计算机)与软件(计算机)之间的通信 2.网络指的是: 一:计算机与计算机之间通过物理连接介质(网络设备)连接到一起:光纤--物理连接介质,和网线一样. 二:计算机与计算机之间基于网络协 ...
- thinkphp中页面中时间的默认显示
1,第一我们都知道thinkphp 控制器和页面是通过$this->assgin();或着$this->在页面中要得到的值的随便变量 ,来传值的 比如(此方法是在有时间控件才能使用的) ...