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

资源简介

离线识别手势图像提取手势SURF_BOW特征使用SVM多分类识别手势

资源截图

代码片段和文件信息

/***author:Dengzhimin
time:2018-5-12
***/
#include 
#include “opencv2/opencv.hpp“
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/features2d/features2d.hpp“
#include “opencv2/contrib/contrib.hpp“
#include “opencv2/nonfree/nonfree.hpp“
#include “opencv2/opencv_modules.hpp“
#include “opencv2/ml/ml.hpp“
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;
int _tmain(int argc _TCHAR* argv[])
{
int K = 7;
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(nImgNum200 CV_32FC1);  //第二个参数,即矩阵的列是由下面的descriptors的大小决定的,可以由descriptors.size()得到,且对于不同大小的输入训练图片,这个值是不同的  
cvSetZero(data_mat);
//类型矩阵存储每个样本的类型标志    
res_mat = cvCreateMat(nImgNum 1 CV_32FC1);
cvSetZero(res_mat);
IplImage* src;
IplImage* srcc;
IplImage* trainImg1 = cvCreateImage(cvSize(128128) 8 3);//需要分析的图片,这里车标的图片尺寸都为40*32,所以上面定义了432,如果要更改图片大小,可以先用debug查看一下descriptors是多少,然后设定好再运行    

Mat allDescriptors;//训练集中图片的feature

BOWKMeansTrainer bowtrainer(200);//SURF描述子进行聚类,用K-means聚类,n=1000,聚成1000类
Mat vocab;//SURF描述子进行聚类向量
SurfFeatureDetector detector;// 构造SURF特征检测器,SurfFeatureDetector surf(3000); // 可以设定阈值
SurfDescriptorExtractor extractor;//描述子提取器extractors 

#if 1
//处理SURF特征  
for (string::size_type i = 0; i != img_path.size(); i++)//只包含图片不包含类别,读取所有图片的feature,
//并且聚成1000类返回一千个向量,每个向量是某个类别的feature的中心点。
{
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);

Mat trainImg = cvarrToMat(trainImg1 true);

Mat element = getStructuringElement(MORPH_RECT Size(2 2));
dilate(trainImg trainImg element);
medianBlur(trainImg trainImg 3);
Mat element2 = getStructuringElement(MORPH_RECT Size(2 2)); //第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的
//高级形态学处理,调用这个函数就可以了,具体要选择哪种操作,就修改第三个参数就可以了。这里演示的是形态学梯度处理
morphologyEx(trainImg trainImg MORPH_CLOSE element2);
Mat descriptors;
vector keyPoints;//存放SURF特征点的向量
    detector.detect(trainImg

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-25 20:33  svm+SURF-试验\
     目录           0  2018-05-25 20:33  svm+SURF-试验\Debug\
     文件      202752  2018-04-12 00:55  svm+SURF-试验\Debug\svm+hog.exe
     文件     1009556  2018-04-12 00:55  svm+SURF-试验\Debug\svm+hog.ilk
     文件     6376448  2018-04-12 00:55  svm+SURF-试验\Debug\svm+hog.pdb
     文件      156992  2018-05-12 12:41  svm+SURF-试验\readme.docx
     目录           0  2018-05-25 20:33  svm+SURF-试验\Release\
     文件       39424  2017-05-25 17:25  svm+SURF-试验\Release\svm+hog.exe
     文件     1346560  2017-05-25 17:25  svm+SURF-试验\Release\svm+hog.pdb
     目录           0  2018-05-25 20:33  svm+SURF-试验\svm+hog\
     文件    14155776  2018-05-12 15:20  svm+SURF-试验\svm+hog.sdf
     文件         967  2016-06-01 09:22  svm+SURF-试验\svm+hog.sln
     文件       37888  2018-05-12 15:20  svm+SURF-试验\svm+hog.v12.suo
     目录           0  2018-05-25 20:33  svm+SURF-试验\svm+hog\Debug\
     文件        2571  2016-06-01 11:24  svm+SURF-试验\svm+hog\Debug\recognition.obj
     文件        2936  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.log
     目录           0  2018-05-25 20:33  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\
     文件        5096  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\cl.command.1.tlog
     文件       18360  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\CL.read.1.tlog
     文件         400  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\CL.write.1.tlog
     文件       12380  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\link.command.1.tlog
     文件        6562  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\link.read.1.tlog
     文件         376  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\link.write.1.tlog
     文件         179  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\svm+hog.tlog\svm+hog.lastbuildstate
     文件      862366  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\train.obj
     文件     2296832  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\vc120.idb
     文件     1626112  2018-04-12 00:55  svm+SURF-试验\svm+hog\Debug\vc120.pdb
     文件      172720  2018-04-12 02:05  svm+SURF-试验\svm+hog\HOG_SVM_LOGO.xml
     目录           0  2018-05-25 20:33  svm+SURF-试验\svm+hog\Release\
     文件        2320  2017-05-25 17:25  svm+SURF-试验\svm+hog\Release\svm+hog.log
     目录           0  2018-05-25 20:33  svm+SURF-试验\svm+hog\Release\svm+hog.tlog\
............此处省略16个文件信息

评论

共有 条评论