• 大小: 17.92MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-22
  • 语言: 其他
  • 标签: OpenCV  HOG  SVM  多分类  

资源简介

使用VS2013+OPENCV 2.4.10 离线训练及识别手势图片获得识别率

资源截图

代码片段和文件信息


#include 
#include “opencv2/opencv.hpp“
#include “windows.h“
#include “fstream“
#include   

using namespace std;
using namespace cv;
int imagehigh =32;
int imagewight =24;
int _tmain(int argc _TCHAR* argv[])
{
vector img_path;//图像路径容器  
vector img_catg;//图像类别容器
int nLine = 0;
string buf;
ifstream svm_data(“C:\\Users\\MelonH\\Desktop\\样本2\\新建文件夹\\手势路径.txt“);//训练样本图片的路径都写在这个txt文件中,使用bat批处理文件可以得到这个txt文件 
if (!svm_data)
return 1;
unsigned long n;
while (svm_data)//将训练样本文件依次读取进来    
{
if (getline(svm_data buf))
{
nLine++;
if (nLine % 2 == 0)//注:奇数行是图片全路径,偶数行是标签 
{
img_catg.push_back(atoi(buf.c_str()));//atoi将字符串转换成整型,标志(01,2,...,9),注意这里至少要有两个类别,否则会出错    
}
else
{
img_path.push_back(buf);//图像路径    
}
}
}
svm_data.close();//关闭文件    
CvMat *data_mat *res_mat;
int nImgNum = nLine / 2; //nImgNum是样本数量,只有文本行数的一半,另一半是标签     
data_mat = cvCreateMat(nImgNum216 CV_32FC1);  //第二个参数,即矩阵的列是由下面的descriptors的大小决定的,可以由descriptors.size()得到,且对于不同大小的输入训练图片,这个值是不同的  
cvSetZero(data_mat);
//类型矩阵存储每个样本的类型标志    
res_mat = cvCreateMat(nImgNum 1 CV_32FC1);
cvSetZero(res_mat);
IplImage* src;
IplImage* trainImg1 = cvCreateImage(cvSize(imagehigh imagewight) 8 3);//需要分析的图片,这里手势的图片尺寸都为32*24,所以上面定义了216,如果要更改图片大小,可以先用debug查看一下descriptors是多少,然后设定好再运行    
//处理HOG特征  
for (string::size_type i = 0; i != img_path.size(); i++)
{
src = cvLoadImage(img_path[i].c_str() 1);//读入一张图片
if (src == NULL)
{
cout << “ can not load the image: “ << img_path[i].c_str() << endl;
continue;
}
cout << “ 处理: “ << img_path[i].c_str() << endl;//打印图片路径
cvResize(src trainImg1);//归一化图像尺寸到32*24
Mat trainImg = cvarrToMat(trainImg1 true);//IplImage* 类型转化到Mat类型
/***对图片预处理***/
Mat element = getStructuringElement(MORPH_RECT Size(2 2));//第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的,第二个参数为核的大小
dilate(trainImg trainImg element);//膨胀,参数1:输入图片,参数2:输出图片,参数3:卷积核
medianBlur(trainImg trainImg 3);//中值滤波,
Mat element2 = getStructuringElement(MORPH_RECT Size(2 2)); //第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的,第二个参数为核的大小
morphologyEx(trainImg trainImg MORPH_CLOSE element2);//形态学处理闭运算,就修改第三个参数就可以了。这里演示的是形态学梯度处理
HOGDescriptor *hog = new HOGDescriptor(cvSize(imagehigh imagewight) cvSize(16 16) cvSize(8 8) cvSize(88) 9);
/***参数1:图像大小
    参数2:块大小
参数3:细胞大小
参数4:块重叠
参数5:细胞中向量维度***/
vectordescriptors;//存放结果     
hog->compute(trainImg descriptors Size(1 1) Size(0 0)); //Hog特征计算      
cout << “HOG dims: “ << descriptors.size() << endl;
n = 0;
for (vector::iterator iter = descriptors.begin(); iter != descriptors.end(); iter++)//HOG特征写入Mat矩阵
{
cvmSet(data_mat i n *iter);//存储HOG特征 
n++;
}
cvmSet(res_mat i 0 img_catg[i]);//标签写入Mat矩阵
cout << “ 处理完毕: “ << img_path[i].c_str() << “ “ << img_catg[i] << endl;
}
   
CvSVM svm;
CvSVMParams param;//这里是SVM训练相关参

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-12 12:41  svm+hog\
     目录           0  2018-05-12 12:41  svm+hog\Debug\
     文件      154112  2018-05-11 17:38  svm+hog\Debug\svm+hog.exe
     文件      926476  2018-05-11 17:38  svm+hog\Debug\svm+hog.ilk
     文件    11725824  2018-05-11 17:38  svm+hog\Debug\svm+hog.pdb
     文件      156992  2018-05-12 12:41  svm+hog\readme.docx
     目录           0  2018-05-12 12:44  svm+hog\svm+hog\
     目录           0  2018-05-12 12:41  svm+hog\svm+hog\Debug\
     文件        2571  2016-06-01 11:24  svm+hog\svm+hog\Debug\recognition.obj
     文件        2672  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.log
     目录           0  2018-05-12 12:41  svm+hog\svm+hog\Debug\svm+hog.tlog\
     文件       69896  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\CL.read.1.tlog
     文件        1006  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\CL.write.1.tlog
     文件        5146  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\cl.command.1.tlog
     文件       12588  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\link.command.1.tlog
     文件       12314  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\link.read.1.tlog
     文件         958  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\link.write.1.tlog
     文件         215  2018-05-11 17:38  svm+hog\svm+hog\Debug\svm+hog.tlog\svm+hog.lastbuildstate
     文件      621627  2018-05-11 17:38  svm+hog\svm+hog\Debug\train.obj
     文件     2862080  2018-05-11 17:38  svm+hog\svm+hog\Debug\vc120.idb
     文件     1552384  2018-05-11 17:38  svm+hog\svm+hog\Debug\vc120.pdb
     文件    14496219  2018-05-11 17:41  svm+hog\svm+hog\HOG_SVM_LOGO.xml
     文件      423687  2018-05-11 17:42  svm+hog\svm+hog\SVM_PREDICT.txt
     文件        5281  2018-04-04 23:32  svm+hog\svm+hog\svm+hog.vcxproj
     文件         949  2016-12-21 16:30  svm+hog\svm+hog\svm+hog.vcxproj.filters
     文件         165  2016-06-17 23:58  svm+hog\svm+hog\svm+hog.vcxproj.user
     文件        9761  2018-05-12 12:44  svm+hog\svm+hog\train.cpp
     文件          32  2018-05-11 16:45  svm+hog\svm+hog.opensdf
     文件    38993920  2018-05-11 16:57  svm+hog\svm+hog.sdf
     文件         967  2016-06-01 09:22  svm+hog\svm+hog.sln
     文件       26624  2018-04-14 23:06  svm+hog\svm+hog.v12.suo
............此处省略0个文件信息

评论

共有 条评论