svm 图片加标签_Opencv2利用svm训练自己图片进行数字识别

了解SVM:https://www.jianshu.com/p/61849d554001

1、获取样本,对自己的样本分类命名,可搜索批量命名方式进行批量命名。

注意样本分辨率保持一致

2、获取训练图像并贴上标签

样本示例:

代码讲解:

void get_0(Mat& trainingImages, vector& trainingLabels)

{

for (int i = 0; i < 408; i++)//数字0的样本数量为408

{

Mat SrcImage = imread("E:\\VSpro\\svm\\0\\" + to_string(i) + ".jpg", 0);//读样本

threshold(SrcImage, SrcImage, 0, 255, CV_THRESH_OTSU + CV_THRESH_BINARY);//二值化

SrcImage = SrcImage.reshape(0, 1);//将图片转成一行

trainingImages.push_back(SrcImage);//存入训练集

trainingLabels.push_back(0);//标签为数字0

}

}

3、配置SVM训练器参数训练并保存模型

OpenCV中的SVM参数优化:https://www.cnblogs.com/hust-yingjie/p/6582218.html

//配置SVM训练器参数

CvSVMParams params;

params.svm_type = SVM::C_SVC;

params.kernel_type = SVM::LINEAR;//RBF效果不好

params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-6);

//训练

CvSVM svm;

cout << "训练中..." << endl;

svm.train_auto(trainingData, classes, Mat(), Mat(), params);

//保存模型

svm.save("E:\\VSpro\\svm\\svm.xml");

4、验证识别效果

char onenumber(Mat img)//分辨率与样本一致,二值化图像

{

CvSVM svm;

svm.clear();

svm.load("E:\\VSpro\\svm\\svm.xml");

Mat p = img.reshape(0, 1);

p.convertTo(p, CV_32FC1);

char response = (int)svm.predict(p);

p.release();

return response;

}

两位数根据X坐标高低判断高低位

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值