神经网络实现车牌数字识别进阶

本文是关于车牌数字识别的进阶教程,利用QT和OpenCV,通过BP神经网络算法进行实现。首先介绍了批量处理图片的重要性,然后详细阐述了实现过程中的六个关键函数,包括图片归一化、CSV文件转换、矩阵训练、样本矩阵保存、预测矩阵转换等。代码已附带详细注释,实测准确率达到95%,增加样本数量可进一步提高准确率。推荐了相关博文以供深入学习。
摘要由CSDN通过智能技术生成

前面的文章详细的介绍了如何批量的读取图片并保存为csv文件,批量处理机器学习中尤为关键,掌握批量处理数据可以节省大量的人力,也能避免犯错。本文是上文的延续,下面将详细介绍怎么用BP算法实现对车牌的识别

  1. 实现工具
    QT + Opencv

  2. 实现思路
    主要用下面六个函数进行实现<按顺调用>
    .h类容(后面将详细讲解各个函数的作用和实现)

 void normalizationPicture(string imagTxtRoute);
 void writeImageToCSV(string);
 void readCSV();
 void practiceXML   
 int predictTest(string picRoute);//预测图片数字
 Mat MatToMatrix(Mat srcImage);

他们的作用以此为:
1-归一化图片同大小,训练矩阵的要求
2-将图片批量转换为csv文件 (实现详见上篇博文)

http://blog.csdn.net/qq_33789319/article/details/78965196

3-将得到矩阵ANN训练的
4-训练样本矩阵,和目标矩阵并保存为xml文件,便于下次加载数据,避免重复训练样本
5-将图片转换为1*n矩阵(预测矩阵要求格式)

3-函数的具体实现代码如下,解释都已经详细注解,相信已经没有阅读难度了

  1. 具体代码实现

.cpp代码如下

void ImagePreprocessing::practiceXML()
{
    CvANN_MLP bp;
    CvANN_MLP_TrainParams params;
    params.train_method = CvANN_MLP_TrainParams::BACKPROP;
    params.bp_dw_scale = 0.1;
    params.bp_moment_scale = 0.1;
    Mat layerSizes = (Mat_<int>(1,3) << 64,64,10);
    bp.create(layerSizes,CvANN_MLP::SIGMOID_SYM);
    bp.train(input_,target_t,Mat(),Mat(),params);//全局变量的input_,target_t,在readCSV()之后得到;
    bp.save("0_9.xml");//保存在构建目录下
    return;
}

int ImagePreprocessing::predictTest(string picRoute)
{
    int flagNumber = -1;
    CvANN_MLP bpPre;
    bpPre.load("0_9.xml");//读入训练好的xml文件
    Mat preImage = imread(picRoute,0);//单通道读入

    resize(preImage,preImage,Size(8,8),0,0,INTER_LINEAR);//对读入的图片进行尺寸规整,要求是输入1*64的矩阵

    //    imshow("preImage",preImage);
    Mat Matrix = MatToMatrix(preImage);//MatToMatrix(Mat)把图片n*m矩阵展开为一行,1*64;
    Mat outMat;//outMat 是存对输入图片预测后的值,那个值大,就代表这是几
    bpPre.predict(Matrix,outMat);
    float tempNum = -100;
    for(int i = 0;i < outMat.cols; i++)
    {


        if(outMat.at<float>(i) >
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值