'加權平均值法
Picture1.AutoRedraw = True
For Y = 0 To Picture1.ScaleHeight Step 15
For X = 0 To Picture1.ScaleWidth Step 15
Tmp& = Picture1.Point(X, Y)
If Len(Hex(Tmp&)) < 8 Then RS = Right(Hex(Tmp&), 2)
If Len(Hex(Tmp&)) = 6 Then BS = Left(Hex(Tmp&), 2): GS = Mid(Hex(Tmp&), 3, 2)
If Len(Hex(Tmp&)) = 4 Then GS = Left(Hex(Tmp&), 2)
If Len(Hex(Tmp&)) > 1 Then R = Val("&H" + RS) Else R = 0
If Len(Hex(Tmp&)) > 3 Then G = Val("&H" + GS) Else G = 0
If Len(Hex(Tmp&)) > 5 Then B = Val("&H" + BS) Else B = 0
If Len(Hex(Tmp&)) = 8 Then R = 0: G = 0: B = 0
T = R + G + B
If T = 0 Then T = 1
TR = R
TG = G
TB = B
R = (TR ^ 2 + TG ^ 2 + TB ^ 2) / T
If R > 255 Then R = 255
G = R
B = R
Picture1.PSet (X, Y), RGB(R, G, B)
Next
Next
Picture1.AutoRedraw = False
Exit Sub
'取最大值法
Picture1.AutoRedraw = True
For Y = 0 To Picture1.ScaleHeight Step 15
For X = 0 To Picture1.ScaleWidth Step 15
Tmp& = Picture1.Point(X, Y)
If Len(Hex(Tmp&)) < 8 Then RS = Right(Hex(Tmp&), 2)
If Len(Hex(Tmp&)) = 6 Then BS = Left(Hex(Tmp&), 2): GS = Mid(Hex(Tmp&), 3, 2)
If Len(Hex(Tmp&)) = 4 Then GS = Left(Hex(Tmp&), 2)
If Len(Hex(Tmp&)) > 1 Then R = Val("&H" + RS) Else R = 0
If Len(Hex(Tmp&)) > 3 Then G = Val("&H" + GS) Else G = 0
If Len(Hex(Tmp&)) > 5 Then B = Val("&H" + BS) Else B = 0
If Len(Hex(Tmp&)) = 8 Then R = 0: G = 0: B = 0
PerC = (100 + Bright) / 100
If R >= G And R >= B Then G = R: B = R
If G >= R And G >= B Then R = G: B = G
If B >= G And B >= R Then R = B: G = B
Picture1.PSet (X, Y), RGB(R, G, B)
Next
Next
Picture1.AutoRedraw = False
Exit Sub
***************old code*************
For Y = 0 To Picture1.ScaleHeight Step 15
For X = 0 To Picture1.ScaleWidth Step 15
Tmp& = Picture1.Point(X, Y)
If Len(Hex(Tmp&)) = 6 Then
BS = Left(Hex(Tmp&), 2)
GS = Mid(Hex(Tmp&), 3, 2)
RS = Right(Hex(Tmp&), 2)
End If
If Len(Hex(Tmp&)) = 4 Then
GS = Left(Hex(Tmp&), 2)
RS = Right(Hex(Tmp&), 2)
End If
If Len(Hex(Tmp&)) = 2 Then
RS = Hex(Tmp&)
End If
If Len(Hex(Tmp&)) > 1 Then
Select Case UCase(Left(RS, 1))
Case "F": R = 15 * 16
Case "E": R = 14 * 16
Case "D": R = 13 * 16
Case "C": R = 12 * 16
Case "B": R = 11 * 16
Case "A": R = 10 * 16
Case "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"
R = Val(UCase(Left(RS, 1))) * 16
End Select
Select Case UCase(Right(RS, 1))
Case "F": R = R + 15
Case "E": R = R + 14
Case "D": R = R + 13
Case "C": R = R + 12
Case "B": R = R + 11
Case "A": R = R + 10
Case "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"
R = R + Val(Right(RS, 1))
End Select
Else
R = 0
End If
If Len(Hex(Tmp&)) > 3 Then
Select Case UCase(Left(GS, 1))
Case "F": G = 15 * 16
Case "E": G = 14 * 16
Case "D": G = 13 * 16
Case "C": G = 12 * 16
Case "B": G = 11 * 16
Case "A": G = 10 * 16
Case "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"
G = Val(UCase(Left(GS, 1))) * 16
End Select
Select Case UCase(Right(GS, 1))
Case "F": G = G + 15
Case "E": G = G + 14
Case "D": G = G + 13
Case "C": G = G + 12
Case "B": G = G + 11
Case "A": G = G + 10
Case "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"
G = G + Val(Right(GS, 1))
End Select
Else
G = 0
End If
If Len(Hex(Tmp&)) > 5 Then
Select Case UCase(Left(BS, 1))
Case "F": B = 15 * 16
Case "E": B = 14 * 16
Case "D": B = 13 * 16
Case "C": B = 12 * 16
Case "B": B = 11 * 16
Case "A": B = 10 * 16
Case "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"
B = Val(UCase(Left(BS, 1))) * 16
End Select
Select Case UCase(Right(BS, 1))
Case "F": B = B + 15
Case "E": B = B + 14
Case "D": B = B + 13
Case "C": B = B + 12
Case "B": B = B + 11
Case "A": B = B + 10
Case "9", "8", "7", "6", "5", "4", "3", "2", "1", "0"
B = B + Val(Right(BS, 1))
End Select
Else
B = 0
End If
If Len(Hex(Tmp&)) = 8 Then
R = 0: G = 0: B = 0
End If
PerC = (100 + Bright) / 100
If R >= G And R >= B Then
G = R
B = R
End If
If G >= R And G >= B Then
R = G
B = G
End If
If B >= G And B >= R Then
R = B
G = B
End If
Picture1.PSet (X, Y), RGB(R, G, B)
Next
Next
End Sub
如果你連VB基本的影像處理都不熟悉,以上程式提供作參考,至於車牌辨識理論
建議去找類神經網路的書籍,或者是型樣式別的理論書,會比較有幫助。
Public Class Form1
Declare Auto Function SendMessage Lib "user32" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal a As String, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer, ByVal e As Integer, ByVal f As Integer, ByVal g As Integer, ByVal h As Integer) As IntPtr
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim hwdc As Long
hwdc = capCreateCaptureWindow("Dixanta Vision System", &H50000000, 0, 0, 320, 240, Me.Handle, 0)
If (hwdc <> 0) Then
SendMessage(hwdc, 1034, 0, 0) : SendMessage(hwdc, 1074, 1, 0) : SendMessage(hwdc, 1076, 30, 0)
Else
MsgBox("沒有找到Webcam")
End If
End Sub
End Class