最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV簡單標準數字識別的完整實例

 更新時間:2021年09月09日 11:40:51   作者:huang_nansen  
這篇文章主要給大家介紹了關于OpenCV簡單標準數字識別的相關資料,要通過opencv 進行數字識別離不開訓練庫的支持,需要對目標圖片進行大量的訓練,才能做到精準的識別出目標數字,需要的朋友可以參考下

在學習openCV時,看到一個問答做數字識別,里面配有代碼,應用到了openCV里面的ml包,很有學習價值。

https://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python#

import sys
import numpy as np
import cv2
 
im = cv2.imread('t.png')
im3 = im.copy()
 
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)   #先轉換為灰度圖才能夠使用圖像閾值化
 
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)  #自適應閾值化
 
##################      Now finding Contours         ###################
# 
image,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
#邊緣查找,找到數字框,但存在誤判
 
samples =  np.empty((0,900))    #將每一個識別到的數字所有像素點作為特征,儲存到一個30*30的矩陣內
responses = []                  #label
keys = [i for i in range(48,58)]    #48-58為ASCII碼
count =0
for cnt in contours:
    if cv2.contourArea(cnt)>80:     #使用邊緣面積過濾較小邊緣框
        [x,y,w,h] = cv2.boundingRect(cnt)   
        if  h>25 and h < 30:        #使用高過濾小框和大框
            count+=1
            cv2.rectangle(im,(x,y),(x+w,y+h),(0,0,255),2)
            roi = thresh[y:y+h,x:x+w]
            roismall = cv2.resize(roi,(30,30))
            cv2.imshow('norm',im)
            key = cv2.waitKey(0)
            if key == 27:  # (escape to quit)
                sys.exit()
            elif key in keys:
                responses.append(int(chr(key)))
                sample = roismall.reshape((1,900))
                samples = np.append(samples,sample,0)
            if count == 100:        #過濾一下過多邊緣框,后期可能會嘗試極大抑制
                break
responses = np.array(responses,np.float32)
responses = responses.reshape((responses.size,1))
print ("training complete")
 
np.savetxt('generalsamples.data',samples)
np.savetxt('generalresponses.data',responses)
#
cv2.waitKey()
cv2.destroyAllWindows()

訓練數據為:

測試數據為:

使用openCV自帶的ML包,KNearest算法

 
import sys
import cv2
import numpy as np
 #######   training part    ############### 
samples = np.loadtxt('generalsamples.data',np.float32)
responses = np.loadtxt('generalresponses.data',np.float32)
responses = responses.reshape((responses.size,1))
 
model = cv2.ml.KNearest_create()
model.train(samples,cv2.ml.ROW_SAMPLE,responses)
 
 
def getNum(path):
    im = cv2.imread(path)
    out = np.zeros(im.shape,np.uint8)
    gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
    
    #預處理一下
    for i in range(gray.__len__()):
        for j in range(gray[0].__len__()):
            if gray[i][j] == 0:
                gray[i][j] == 255
            else:
                gray[i][j] == 0
    thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2)
     
    image,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
    count = 0 
    numbers = []
    for cnt in contours:
        if cv2.contourArea(cnt)>80:
            [x,y,w,h] = cv2.boundingRect(cnt)
            if  h>25:
                cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
                roi = thresh[y:y+h,x:x+w]
                roismall = cv2.resize(roi,(30,30))
                roismall = roismall.reshape((1,900))
                roismall = np.float32(roismall)
                retval, results, neigh_resp, dists = model.findNearest(roismall, k = 1)
                string = str(int((results[0][0])))
                numbers.append(int((results[0][0])))
                cv2.putText(out,string,(x,y+h),0,1,(0,255,0))
                count += 1
        if count == 10:
            break
    return numbers
 
numbers = getNum('1.png')

總結

到此這篇關于OpenCV簡單標準數字識別的文章就介紹到這了,更多相關OpenCV標準數字識別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • win10系統(tǒng)下python3安裝及pip換源和使用教程

    win10系統(tǒng)下python3安裝及pip換源和使用教程

    這篇文章主要介紹了win10系統(tǒng)下python3安裝及pip換源和使用教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • python實現簡易學生信息管理系統(tǒng)

    python實現簡易學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現簡易學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 基于Django統(tǒng)計博客文章閱讀量

    基于Django統(tǒng)計博客文章閱讀量

    這篇文章主要介紹了基于Django統(tǒng)計博客文章閱讀量,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • python求最大公約數和最小公倍數的簡單方法

    python求最大公約數和最小公倍數的簡單方法

    在本篇文章里小編給大家整理的是關于python求最大公約數和最小公倍數的簡單方法,需要的朋友們學習下。
    2020-02-02
  • python調用win32接口進行截圖的示例

    python調用win32接口進行截圖的示例

    這篇文章主要介紹了python調用win32接口進行截圖的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • python中將兩組數據放在一起按照某一固定順序shuffle的實例

    python中將兩組數據放在一起按照某一固定順序shuffle的實例

    今天小編就為大家分享一篇python中將兩組數據放在一起按照某一固定順序shuffle的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python操作gitlab API過程解析

    python操作gitlab API過程解析

    這篇文章主要介紹了python操作gitlab API過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Numpy判斷數組是否全0的三種方法

    Numpy判斷數組是否全0的三種方法

    本文介紹了三種判斷NumPy數組是否全為零的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • Django學習之文件上傳與下載

    Django學習之文件上傳與下載

    這篇文章主要為大家詳細介紹了Django學習之文件上傳與下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 淺談python3.x pool.map()方法的實質

    淺談python3.x pool.map()方法的實質

    這篇文章主要介紹了python3.x pool.map方法的實質,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論

巴南区| 淮安市| 定远县| 搜索| 台山市| 荣昌县| 北碚区| 阳山县| 东乡县| 尚志市| 昔阳县| 改则县| 绥宁县| 北辰区| 平南县| 万年县| 库伦旗| 乌鲁木齐市| 贺州市| 刚察县| 嫩江县| 昭苏县| 醴陵市| 红桥区| 辉南县| 贵州省| 太谷县| 偃师市| 华池县| 元氏县| 忻州市| 云龙县| 苍南县| 雅安市| 亚东县| 甘南县| 蚌埠市| 开平市| 林州市| 攀枝花市| 长海县|