我正在使用 OpenCV LibSVM 开发一个手写字符识别系统。我为特征向量提取了 14 个特征,包括 Hu 矩、仿射不变矩、角数等。对于每个字符,我使用 5 个样本(对于字母“A”,有 5 种类型的 A)。我知道 5 个样本是不够的,但目前我每个角色只有 5 个样本。
我在 opencv 文档中使用基本的 LINEAR SVM 示例。我的问题是,出于我的目的,我可以按原样使用该文档示例。我读过关于使用多类 SVM 的 OCR 系统。我的应用程序需要这样的多类 SVM。我不明白这一点。请问有人可以解释吗?这是我的代码。
我有 180 个数字和英文大写字母样本,一个样本有 14 个特征。
float labels[180][1] = {1.0, 2.0, 3.0, 4.0, 5.0, ,,,,, -> 180.0};
Mat matlabesls(180,1, CV_32FC1, labels);
Mat mattrainingDataMat(180, 14, CV_32FC1, ifarr_readtrainingdata);
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
CvSVM SVM;
SVM.train(mattrainingDataMat,matlabesls,Mat(),Mat(),params);
Mat matinput(1,14,CV_32FC1,ifarr_testarray);
is_recognizedcharacter= SVM.predict(matinput);
return is_recognizedcharacter;