《ofo车牌识别》研发心得06-OpenCV的SVM
【摘要】 图像预处理搞定,可以扔进SVM做训练和预测了。
图像预处理搞定,可以扔进SVM做训练和预测了。
SVM相当简单,但要万分注意OpenCV的SVM要CV_32S
训练
//转成Mat
Mat trainningDataMat(countLines,32/8*72/8,CV_32FC1,trainingData);
Mat labelsMat(countLines,1,CV_32S,labels); //注意label要用CV_32S,不能用CV_32FC1。否则会报错
//训练SVM
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::POLY);
svm->setDegree(3);
svm->setGamma(0.01);
svm->setCoef0(2);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
svm->train(trainningDataMat,ROW_SAMPLE, labelsMat);
svm->save("svmtrain.txt");
预测(注意预测要逐行逐行来)
//转成Mat(预测只能逐行逐行来)
for (int i=0;i<countLines;i++)
{
Mat trainningDataMat(1,32/8*72/8,CV_32FC1,trainingData[i]);
//预测SVM
cv::Ptr<cv::ml::SVM> mSvm2;
mSvm2 = cv::ml::SVM::load<cv::ml::SVM>("svmtrain.txt");
float q = mSvm2->predict(trainningDataMat);
cout<<"predict: "<<q<<"\treal:"<<labels[i]<<endl;
predictData<<"predict: "<<q<<"\treal:"<<labels[i]<<endl;
}
成功!Yeah!
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)