最近两天试着用svm来完成车牌识别的OCR部分, 查了中文资料大部分都是从opencv官网上原文截取的, 我都有些怀疑有些博主运行完样例程序之后有没有做下去.. google了一下也是, 前几页没看到想要的东西, 机器学习小白的心受到了打击, 所以就边看边玩了两天.. 最后还是自己写了程序
其实如果想先跑svm的话也不用去特意理解原理, 直接调用程序就好. 当然学学svm的原理更好, 这些天我就在看Andrew机器学习的网易公开课, 但是让我来讲的话怕误导人, 还是直接说怎么用吧
这里有个 SVM + HOG 摘要PPT
opencv的SVM是用的LIBSVM, 关于LIBSVM可以看看这个文档 , 东西比较全
我也参考了下面的两个网站
http://www.csie.ntu.edu.tw/~piaip/svm/#
http://docs.opencv.org/3.1.0/d0/dcc/tutorial_non_linear_svms.html#gsc.tab=0
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
可以看看我的新文章 , HOG+svm 行人检测
http://blog.csdn.net/traumland/article/details/52288473, 里面有一些更加详细的解释
2016.8.24
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先呢, 先要准备用来训练的样本
样本, 是由特征构成的 n维向量
样本数为m时, 首先应该定义一个 m x n 的Mat (或n x m)类型的变量.(非Mat类型的暂时还没有见过)
对于每个样本, 需要对应的标签, 比如说一共有 s 种标签, 那么对应应该定义一个 m x 1的Mat,
且对应(i,0)像素要存标签名. i是[0,m)的整数, 对应该行样本
标签也可以用vector储存, 只需要对应push_back m个对应标签即可
对于 m x n 样本(samples), 由于每行代表一个样本, 所以要列方向进行行取样(ROW_SAMPLE), 故
cv::Ptr<cv::ml::TrainData> trainData =
cv::ml::TrainData::create(samples, cv::ml::SampleTypes::ROW_SAMPLE,
labels);
注意所有Mat要用CV_32F去存