资源简介
使用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\li
文件 12314 2018-05-11 17:38 svm+hog\svm+hog\Debug\svm+hog.tlog\li
文件 958 2018-05-11 17:38 svm+hog\svm+hog\Debug\svm+hog.tlog\li
文件 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.xm
文件 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个文件信息
相关资源
- VS2013+OpenCV2.4.10提取傅里叶描述子特征
- 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程序
评论
共有 条评论