新手上路记本人做的第一个图像处理实验
喷码字符识别流程:读图——滤波——二值化——腐蚀——分割——ANN训练——识别
本例程训练类别14类(0-9,C、L、冒号、空格),每类样本数量50张
搭配环境:VS2017+opencv3.4.1
语言:C++
由于工程有点大,下面进行简单介绍,详情见附件(附有完整的程序,实验报告及论文)
程序运行效果:
图像预处理:
1.读取图像
Mat pSrcImg = imread("D:\\1-文件资料\\5-字符检测\\识别图片\\source3.bmp", 0);//从本地读取灰度图
imshow("原图", pSrcImg);
2.滤波
Mat dst;
blur(pSrcImg,dst,Size(7,7));
imwrite(FilePath+"remove1.bmp", dst);
imshow("remove1", dst);
3.二值化
Mat pDecImg;
pDecImg.create(pSrcImg.size(), pSrcImg.type()); //1通道
pDecImg = pSrcImg.clone();
threshold(pSrcImg, pDecImg,0,255,cv::THRESH_OTSU);
imshow("binary1", pDecImg);
imwrite(FilePath+"binary1.bmp", pDecImg);
4.腐蚀去噪
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
Mat out1;
dilate(pDecImg, out1, element);
imshow("腐蚀", out1);
5.图像分割
fenge(out1, 60, FilePath, ".bmp", 110);//分割函数原型及参数解释见附件
分割在本项目中是重点和难点,一旦分割错误,整张图片的识别也会出现错误。本程序的分割存在一些BUG,可根据个人需要自行修改或重新编写。
6.将分割后的图像统一大小后保存(后续进行分类)
Mat imagErode[24], readfile[24];
string Pathfile, PathfileResize;
int Namefile = 1, str1=1;
for (int i = 0; i < 24; i++)
{
Pathfile = FilePath + to_string(Namefile) + ".bmp";
PathfileResize = ResizeFilePath + to_string(Namefile) + ".bmp";
Namefile++;
readfile[i] = imread(Pathfile, 0);
resize(readfile[i], imagErode[i],Size(14,28));
imwrite(PathfileResize, imagErode[i]);
}
将图片统一大小为宽14长28(大小可更改),然后就可以分类收集样本,此例收集样本类别14,每类图片数量50张。收集完样本就要先进行ANN训练,再识别。训练是另外单独的工程,每次识别时调用训练好的.xml文件,就不需要每次都重新训练。训练程序在附件给出。
7.识别(对整张图片分割后的字符)
Mat Fengeimg[40], Resizeimage[40];
string Pathfile1,PathfileResize;
cout<<"识别结果为:"<<endl;
for(int i = 0; i< CharactersNumber1+ CharactersNumber2; i++)
{
Pathfile1 = FilePath + to_string(i+1) + ".bmp";
PathfileResize = FilePath +"resize\\" + to_string(i + 1) + ".bmp";
Fengeimg[i] = imread(Pathfile1, 0);
resize(Fengeimg[i], Resizeimage[i], Size(14, 28));
imshow("字符"+to_string(i+1), Resizeimage[i]);
imwrite(PathfileResize, Resizeimage[i]);
predictann1(Resizeimage[i]);//识别函数,传入参数为要识别的图像
if (i == CharactersNumber1-1) cout<<endl;
}
ANN训练
训练代码见附件https://download.csdn.net/download/weixin_41303441/10806458
原来我设置的下载积分为1,现在不知道为什么涨了这么多,下面附上百度云盘的链接
链接:https://pan.baidu.com/s/1_LyXOOWinHsh5jifyFpWNQ
提取码:6tpr