《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)