牛奶盒喷码字符识别(基于opencv)————(三)字符的识别
牛奶盒噴碼字符識別(基于opencv)————(三)字符的識別
- 更新
- 效果
- 方法
- 1.制作模板
- 2.讀入模板,
- 3.讀入分割出來的圖片
- 4.逐一匹配
- 不足
更新
2018.11.16:
效果
先看效果吧。
效果極佳,
方法
1.制作模板
將分割出來的數字,效果很不錯的當作我們的模板,后面用作匹配,C L :都當作數字處理
2.讀入模板,
這里我通過建立三維數組,采用for循環讀入
注意,讀取時候,要加0參數,不然會以三通道方式讀取。
3.讀入分割出來的圖片
將上一節分割出來的20張圖片,都讀入進去,同樣構建三維數組,for循環讀入
img=np.zeros([dsize,dsize,20],np.uint8) for i in range(20):# print(i)img[:,:,i] = cv2.imread(root + "%d.png" %i, 0) #記住參數 0 #cv2.imshow("s"+ "%d" %i, img[:,:,i])4.逐一匹配
采用嵌套for循環,使得每個分割的圖像與模板匹配,算出來的rez值最大的,就是最有可能的字符,這里采用cv2.TM_CCOEFF_NORMED標準相關匹配方法,這是 OpenCV 支持的最復雜的一種相似度算法。這里的相關運算就是數理統計學科的相關系數計算方法。
總之,越復雜,占用cpu越多,越耗時,但是越準確。
看看誰最大,使用np.argmax直接得出答案,在等于10,11,12加入判斷即可
效果如頂部那樣,統計了50張圖,也就是1000個數字,準確率為95.2%
不足
當然算法還有一些不足之處:
比如:
1.如果字符不為20的話,算法會出錯,只不過我的數據集90%的圖都是20個字符的,要改進,可以使用文件操作相關函數
2.對于0和8,或扭曲數字,很容易出錯,有機會我會嘗試卷積神經網絡。
3.對于一些扭曲的圖片,兩行直接沒有白色像素,有很小幾率會無法切割行。
總之,這只是一門選修課,我也不愿太費心思去繼續改進,有什么問題可以評論區交流.
等結課后公布完整代碼,供大家學習交流。
總結
以上是生活随笔為你收集整理的牛奶盒喷码字符识别(基于opencv)————(三)字符的识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Panabit应用层流量管理系统
- 下一篇: nxlog以syslog方式发送日志