资源简介
使用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\li
文件 12334 2018-04-06 04:33 svm+ Fourier\svm+hog\Debug\svm+hog.tlog\li
文件 998 2018-04-06 04:33 svm+ Fourier\svm+hog\Debug\svm+hog.tlog\li
文件 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.xm
文件 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
相关资源
- VS2013+opencv2.4.10提取SURF_BOW特征使用s
- VS2013+OPENCV2.4.10 提取HOG特征使用SVM多分
- OPENCV中团块跟踪
- OpenCV.3.Computer.Vision.Application.Programmi
- opencv车牌识别
- QT5.7 + OPENCV3.2 + 动态条形码识别
- 颜色识别中各颜色阈值快速查找小程
- opencv已经编译好直接可以用的连接库
- opencv双目通过特征提取恢复深度
- opencv火焰检测识别230808
- opencv 张正友相机标定源代码及标定照
- opencv3.4+opencv_contrib3.4+cuda10.0+tbb+win10
- SURF算法+单应矩阵+RANSAC算法实现拼接
- 相机标定单目、双目.zip
- opencv-3.4.1-vc14_vc15.exe(OpenCV VS14.15安装
- OpenCV3.4.1-1安装包
- 从车道线检测项目入门opencv
- opencv安装
- opencv4.0.0.0
- frozen_east_text_detection.pb
- 车牌识别系统opencv版
- OpenCV4.0.0包含Contrib完整包
- opencv_contrib-4.0.1.zip
- opencv_contrib3.4.0+vs2017+win10+opencv3.4.0
- OpenCV3.2.0.chm离线帮助文档opencv官方文
- OpenCV人脸识别样本数据集,包含正样
- OpenCV4经过cmake编译完整的contribute,
- opencv_contrib-4.2.0.zip
- VS2015编译的OpenCV4.1.2
- opencv-4.0.0-vc14_vc15.EXE程序
评论
共有 条评论