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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛奶盒喷码字符识别(基于opencv)————(三)字符的识别

發布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛奶盒喷码字符识别(基于opencv)————(三)字符的识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

牛奶盒噴碼字符識別(基于opencv)————(三)字符的識別

  • 更新
  • 效果
  • 方法
    • 1.制作模板
    • 2.讀入模板,
    • 3.讀入分割出來的圖片
    • 4.逐一匹配
  • 不足

更新

2018.11.16:

效果

先看效果吧。



效果極佳,

方法

1.制作模板

將分割出來的數字,效果很不錯的當作我們的模板,后面用作匹配,C L :都當作數字處理

2.讀入模板,

這里我通過建立三維數組,采用for循環讀入
注意,讀取時候,要加0參數,不然會以三通道方式讀取。

templatepath="C:\\Users\\mechrevo\\Desktop\\template\\" #模板 template=np.zeros([dsize,dsize,13],np.uint8) #注意uint8為1通道,默認為 3通道 for i in range(13):#print(i)template[:,:,i] = cv2.imread(templatepath + "%d.png" %i, 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越多,越耗時,但是越準確。

res=np.zeros([13],np.float16)for i in range(20):for j in range(13):res[j] = cv2.matchTemplate(img[:,:,i],template[:,:,j],cv2.TM_CCOEFF_NORMED) #注意邏輯maxindex = np.argmax(res) if (maxindex<10 and maxindex >=0): print(maxindex)elif (maxindex == 10):print("C")elif (maxindex == 11):print("L")elif (maxindex == 12):print(":") #print(res)


看看誰最大,使用np.argmax直接得出答案,在等于10,11,12加入判斷即可
效果如頂部那樣,統計了50張圖,也就是1000個數字,準確率為95.2%

不足

當然算法還有一些不足之處:
比如:
1.如果字符不為20的話,算法會出錯,只不過我的數據集90%的圖都是20個字符的,要改進,可以使用文件操作相關函數
2.對于0和8,或扭曲數字,很容易出錯,有機會我會嘗試卷積神經網絡。
3.對于一些扭曲的圖片,兩行直接沒有白色像素,有很小幾率會無法切割行。

總之,這只是一門選修課,我也不愿太費心思去繼續改進,有什么問題可以評論區交流.
等結課后公布完整代碼,供大家學習交流。

總結

以上是生活随笔為你收集整理的牛奶盒喷码字符识别(基于opencv)————(三)字符的识别的全部內容,希望文章能夠幫你解決所遇到的問題。

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