#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数据集代码的更多相关文章

  1. python实现HOG+SVM对CIFAR-10数据集分类(上)

    本博客只用于学习,如果有错误的地方,恳请指正,如需转载请注明出处. 看机器学习也是有一段时间了,这两天终于勇敢地踏出了第一步,实现了HOG+SVM对图片分类,具体代码可以在github上下载,http ...

  2. 第十八节、基于传统图像处理的目标检测与识别(HOG+SVM附代码)

    其实在深度学习中我们已经介绍了目标检测和目标识别的概念.为了照顾一些没有学过深度学习的童鞋,这里我重新说明一次:目标检测是用来确定图像上某个区域是否有我们要识别的对象,目标识别是用来判断图片上这个对象 ...

  3. Hog SVM 车辆 行人检测

    HOG SVM 车辆检测 近期需要对卡口车辆的车脸进行检测,首先选用一个常规的检测方法即是hog特征与SVM,Hog特征是由dalal在2005年提出的用于道路中行人检测的方法,并且取的了不错的识别效 ...

  4. 利用HOG+SVM实现行人检测

    利用HOG+SVM实现行人检测 很久以前做的行人检测,现在稍加温习,上传记录一下. 首先解析视频,提取视频的每一帧形成图片存到磁盘.代码如下 import os import cv2 videos_s ...

  5. HOG特征原理及代码实现

    HOG特征原理 HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子. 它通过计算和统计 ...

  6. HoG SVM 目标检测分析

    前一段时间开始了解HoG跟SVM行人识别,看了很多包括Dalal得前辈的文章及经验分享,对HoG理论有了些初步的认识. HoG 的全称是 Histogram of Oriented Gradient, ...

  7. HOG + SVM(行人检测, opencv实现)

    HOG+SVM流程 1.提取HOG特征 灰度化 + Gamma变换(进行根号求解) 计算梯度map(计算梯度) 图像划分成小的cell,统计每个cell梯度直方图 多个cell组成一个block, 特 ...

  8. 【目标检测】基于传统算法的目标检测方法总结概述 Viola-Jones | HOG+SVM | DPM | NMS

    "目标检测"是当前计算机视觉和机器学习领域的研究热点.从Viola-Jones Detector.DPM等冷兵器时代的智慧到当今RCNN.YOLO等深度学习土壤孕育下的GPU暴力美 ...

  9. hog+svm+检测人(代替默认的参数)

    #include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui. ...

随机推荐

  1. c++ 判断两个容器是否相等(equal)

    #include <iostream> // cout #include <algorithm> // equal #include <vector> // vec ...

  2. angular5 ng-bootstrap和ngx-bootstrap区别

    https://angular.cn/resources ngx-bootstrap 安装: npm install ngx-bootstrap --save 再引入css <link href ...

  3. unity中实现静态的3D对象对其他对象的跟随

    using UnityEngine; public class FollowPosition : MonoBehaviour { public Transform targetTrans; publi ...

  4. Krapno 1

    All krpano software can be downloaded and tested for free - without any functional limitation.For us ...

  5. Tips for Sync Vimtex and PDF

    vimtex synctex: \lv. skim synctex: to display the TeX source line corresponding to a point in the PD ...

  6. C++ vector 实现二维数组

    在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组.本文主要是关于使用Vector初始化.遍历方面的内容.其他二维的思想也是类似的. 这里简单叙述一下C++ 构 ...

  7. iOS UI-三种简单的动画设置

    一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 ...

  8. python学习笔记(八)---关于Django的下载以及环境配置

    下载链接: https://www.djangoproject.com/download/ (建议选择 1.6版本) 然后安装 Django下载后为压缩包,解压缩跟Python放在同一个根目录,在do ...

  9. Spring Boot 学习(一) 快速搭建SpringBoot 项目

    快速搭建一个 Spring Boot 项目 部分参考于<深入实践Spring Boot>.<Spring实战 第四版>与程序猿DD的有关博客. 参考(嘟嘟独立博客):http: ...

  10. ajax ajax基本介绍

    jquery中ajax方法参数详解 url 要求是string类型参数(默认为当前页面地址) 发送请求的地址 type 要求是string类型的参数,请求方式(post或get)默认为get.注意其他 ...