[Visual Basic 6.0] 影像處理探討 - 辨識圖片中的阿拉伯數字

摘要:[Visual Basic 6.0] 影像處理探討 - 辨識圖片中的阿拉伯數字

[Visual Basic 6.0] 影像處理探討 - 辨識圖片中的阿拉伯數字

程式在做影像處理時,常常會需要辨識字體。例如驗證碼、校驗碼、問與達、防止機器人工具。

然而辨識圖片中的字母、數字的方法有很多,例如使用"隨機森林(Random forest)演算法"。

但是如果是針對阿拉伯數字,我們可以透過屬性的觀察。但是數字的形狀、字體變化多端。

於是想出一套很消極的作法,那就是統計數字佔的顏色數量。

 

但這個方法的缺點非常的多,卻很便利。

1.侷限於數字的顏色與背景色不同

(少部分相同可以用誤差值的方法去解決,但辨識的正確性會降低)

2.侷限於數字的大小不能夠隨意改變

(每一個樣子的數字、字母,都有一定的顏色佔有量。)

3.假設數字 1 大小為 10pt、數字 2 大小為 7pt。而他們的顏色佔有量相同,就會導致誤判。

(顏色的佔有量取決於剛開始製造數字圖片的原樣,當發生衝突時。就必須做更改)

 

演算法與實作方法:

1.先利用影像軟體建立圖庫 (範例皆使用 白底黑字)

2.圖庫中的數字位置可以任意改變 (大小與字體不能改變)

3.將0~9數字個別掃描一次將掃描到的數字顏色佔有量儲存到資料庫中

4.辨識時只要判斷數字顏色佔有量就可以輕易得知影像中的_

 

Q1 為什麼 數字的顏色必須跟背景不同

A1 當顏色相同的越多,誤判率就會有明顯的提升。因為使用數字顏色佔有量來辨識。顏色佔有量就顯的非常重要。

 

Q2 為什麼 數字大小與字體不能改變,而位置可以改變

A1 位置的變化不會影響最終的顏色佔有量(除非位置跑出掃描區,這個情況為無法辨識),而改變大小或字體,就可能會影響。

 

 

程式碼:

Private Sub 載入圖片_Click()
On Error GoTo Ends
辨識圖.Picture = LoadPicture(App.Path & "\" & 圖檔名稱 & ".bmp")
Ends:
圖檔名稱.Text = ""
End Sub

Private Sub 圖片辨識_Click()

結果.Text = "分析中,,,請稍候,,,,"

DoEvents

辨識過程.BackColor = &H8000000F
Black = 0
For i = 0 To 4000 Step 15
    For j = 0 To 4365 Step 15
        X = 辨識圖.Point(i, j)
        R = X Mod 256
        X = X / 256
        G = X Mod 256
        X = X / 256
        B = X Mod 256
        If R = 0 And G = 0 And B = 0 Then
            Black = Black + 1
        End If
        辨識過程.ForeColor = &H8000000D
        辨識過程.PSet (i, j)
    Next j
Next i

Select Case Black
    Case "7601"
        Ans = 0
    Case "5417"
        Ans = 1
    Case "6061"
        Ans = 2
    Case "6023"
        Ans = 3
    Case "6595"
        Ans = 4
    Case "6247"
        Ans = 5
    Case "7388"
        Ans = 6
    Case "4927"
        Ans = 7
    Case "8138"
        Ans = 8
    Case "7472"
        Ans = 9
    Case Else
        Ans = "無法辨識"
End Select

結果 = "辨識鑑定結果為: " & Ans
End Sub

 

 

 

辨識圖中的阿拉伯數字.rar

#0xDe 從分享中學習

#Facebook:ProgrammerDe (https://www.facebook.com/MicrosoftDes) 有問題歡迎提問