日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

基于OpenCV 人工神经网络的喷码字符识别(C++)

發布時間:2023/12/31 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于OpenCV 人工神经网络的喷码字符识别(C++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

新手上路記本人做的第一個圖像處理實驗
噴碼字符識別流程:讀圖——濾波——二值化——腐蝕——分割——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

總結

以上是生活随笔為你收集整理的基于OpenCV 人工神经网络的喷码字符识别(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。