基于OpenCV 人工神经网络的喷码字符识别(C++)
新手上路記本人做的第一個圖像處理實驗
噴碼字符識別流程:讀圖——濾波——二值化——腐蝕——分割——ANN訓練——識別
本例程訓練類別14類(0-9,C、L、冒號、空格),每類樣本數量50張
搭配環境:VS2017+opencv3.4.1
語言:C++
由于工程有點大,下面進行簡單介紹,詳情見附件(附有完整的程序,實驗報告及論文)
程序運行效果:
圖像預處理:
1.讀取圖像
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.識別(對整張圖片分割后的字符)
ANN訓練
訓練代碼見附件https://download.csdn.net/download/weixin_41303441/10806458
原來我設置的下載積分為1,現在不知道為什么漲了這么多,下面附上百度云盤的鏈接
鏈接:https://pan.baidu.com/s/1_LyXOOWinHsh5jifyFpWNQ
提取碼:6tpr
總結
以上是生活随笔為你收集整理的基于OpenCV 人工神经网络的喷码字符识别(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 161021_又是两个月还是总结
- 下一篇: vcpkg的使用