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

资源简介

使用VS2013+OpenCV2.4.10提取手势傅里叶描述子特征使用SVM离线识别手势图片

资源截图

代码片段和文件信息


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

using namespace std;
using namespace cv;
/***求傅里叶描述子特征***/
float Pi = 3.1415926;
void EllipticFourierDescriptor(vector &contour vector &CE)
{
vector ax bx ay by;
int m = contour.size();
int n = 20;
float t = (2 * Pi) / m;
for (int k = 0; k {
ax.push_back(0.0);
bx.push_back(0.0);
ay.push_back(0.0);
by.push_back(0.0);
for (int i = 0; i {
ax[k] = ax[k] + contour[i].x*cos((k + 1)*t*i);
bx[k] = bx[k] + contour[i].x*sin((k + 1)*t*i);
ay[k] = ay[k] + contour[i].y*cos((k + 1)*t*i);
by[k] = by[k] + contour[i].y*sin((k + 1)*t*i);
}
ax[k] = ax[k] / m;
bx[k] = bx[k] / m;
ay[k] = ay[k] / m;
by[k] = by[k] / m;
}

for (int k = 1; k {
float value = (float)sqrt((ax[k] * ax[k] + ay[k] * ay[k]) / (ax[0] * ax[0] + ay[0] * ay[0])) + sqrt((bx[k] * bx[k] + by[k] * by[k]) / (bx[0] * bx[0] + by[0] * by[0]));
CE.push_back(value);

}
for (int count = 0; count {
cout << “CE: “ << CE[count]/*<<“ ax: “< }
}
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(nImgNum 20 CV_32FC1);  //第二个参数,即矩阵的列是由下面的descriptors的大小决定的,可以由descriptors.size()得到,且对于不同大小的输入训练图片,这个值是不同的  
cvSetZero(data_mat);
//类型矩阵存储每个样本的类型标志    
res_mat = cvCreateMat(nImgNum 1 CV_32FC1);
cvSetZero(res_mat);
IplImage* src;
IplImage* trainImg = cvCreateImage(cvSize(32 24) 8 3);//需要分析的图片,这里手势的图片尺寸都为32*24,如果要更改图片大小,可以先用debug查看一下descriptors是多少,然后设定好再运行    
Mat image;
for (string::size_type i = 0; i != img_path.size(); i++)
{
image = imread(img_path[i].c_str() 1);
if (image.empty())
{
cout << “ can not load the image: “ << img_path[i].c_str() << endl;
continue;
}

Mat gray = Mat::zeros(image.size() CV_8UC1);
cvtColor(image gray CV_BGR2GRAY);
Canny(gray gray 128 255 3);
Mat element = getStructuringElement(MORPH_RECT Size(2 2)); //第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的
//高级形态学处理,调用这个函数就可以了,具体要选择哪种操作,就修改第三个参数就可以了。这里演示的是形态学梯度处理
morphologyEx(gray gray MORPH_CLO

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-12 17:13  svm+ Fourier\
     目录           0  2018-05-12 17:11  svm+ Fourier\Debug\
     文件      172032  2018-04-06 04:33  svm+ Fourier\Debug\svm+hog.exe
     文件     1709180  2018-04-06 04:33  svm+ Fourier\Debug\svm+hog.ilk
     文件     4992000  2018-04-06 04:33  svm+ Fourier\Debug\svm+hog.pdb
     文件      156992  2018-05-12 12:41  svm+ Fourier\readme.docx
     目录           0  2018-05-12 17:13  svm+ Fourier\svm+hog\
     目录           0  2018-05-12 17:11  svm+ Fourier\svm+hog\Debug\
     文件        2571  2016-06-01 11:24  svm+ Fourier\svm+hog\Debug\recognition.obj
     文件        4009  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.log
     目录           0  2018-05-12 17:11  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\
     文件       69618  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\CL.read.1.tlog
     文件        1046  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\CL.write.1.tlog
     文件        7430  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\cl.command.1.tlog
     文件       20654  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\link.command.1.tlog
     文件       12334  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\link.read.1.tlog
     文件         998  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\link.write.1.tlog
     文件         195  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\svm+hog.tlog\svm+hog.lastbuildstate
     文件      702042  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\train.obj
     文件     2599936  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\vc120.idb
     文件     1576960  2018-04-06 04:33  svm+ Fourier\svm+hog\Debug\vc120.pdb
     文件     5954171  2018-04-06 04:40  svm+ Fourier\svm+hog\HOG_SVM_LOGO.xml
     文件      423737  2018-04-06 04:42  svm+ Fourier\svm+hog\SVM_PREDICT.txt
     文件        5281  2018-03-21 18:05  svm+ Fourier\svm+hog\svm+hog.vcxproj
     文件         949  2016-12-21 16:30  svm+ Fourier\svm+hog\svm+hog.vcxproj.filters
     文件         165  2016-06-17 23:58  svm+ Fourier\svm+hog\svm+hog.vcxproj.user
     文件       10598  2018-05-12 17:13  svm+ Fourier\svm+hog\train.cpp
     文件    38928384  2018-05-12 17:13  svm+ Fourier\svm+hog.sdf
     文件         967  2016-06-01 09:22  svm+ Fourier\svm+hog.sln
     文件       40448  2018-05-12 17:13  svm+ Fourier\svm+hog.v12.suo

评论

共有 条评论