重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
Private Sub Command1_Click()
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、富陽網(wǎng)站維護(hù)、網(wǎng)站推廣。
Dim A, B, C
A = 10
B = 3
C = f(A) / (f(B) * f(A - B))
Print C
End Sub
Private Function f(n)
Dim I As Integer
f = 1
For I = 1 To n
f = f * I
Next I
End Function
之前l(fā)oad的一個(gè)VB的打字程序的一段, 思路和語言跟C#差不多,你借鑒一下吧
Private Sub txtType_Change()
Dim Start As Integer, i As Integer
On Error Resume Next
Start = txtType.SelStart
'If DelTF = True And Len(txtType.Text) = 1 Then txtType.Text = ""
Hang = Num \ 44 '打完一行,就開始打下一行(計(jì)算現(xiàn)在應(yīng)該打第幾行)
'If Hang = 8 Then Hang = 0
Hang = Hang Mod 8 'Hang始終都是0-7的順序下去
No = Num Mod 44 '每一行的第幾個(gè)
If Start = 0 Or DelTF = True Then Exit Sub '如果在KeyDown中按下刪除鍵則退出Chang
'If Hang = 3 And No = (44 - 5) Then '到第4行倒數(shù)第6個(gè),則第1行隱藏,第8行現(xiàn)身
' lblEgg(0).Caption = ""
' 'lblegg(0).Visible=False '可能不需要隱藏,因?yàn)槭峭该髂J剑瑳]有文字效果與隱藏一樣
' For i = 1 To 44 '卸掉現(xiàn)在行的前面第3行,中間隔著2行 例:(44*3+39)=171,終止:171-44*2-39,開始:171-44*3-39+1
' Unload lblOK(i) '卸掉第1行的標(biāo)示對錯(cuò)的顏色標(biāo)簽,節(jié)約內(nèi)存
' Next '實(shí)時(shí)錯(cuò)誤'340',控件數(shù)組元素'1'不存在,卸過一次后又再卸
' lblEgg(7).Caption = Mid$(StrText, mNumber * 44 + 1, 44) '繼續(xù)的文字內(nèi)容(后面第4行,如果例現(xiàn)在是第6行,后面剩2行,后第4行就越過算到正數(shù)第2行
'End If
'If Hang = 3 And No = (44 - 6) Then '(44 - 5),上面示例舊文本的消失與顯示新文本
If lblEgg((Hang + 4) Mod 8).Caption = "" And No = (44 - 6) Then
'If lblEgg(Hang - 3).Caption "" Then '檢測前面第3行是否已經(jīng)空掉,因?yàn)榕轮貜?fù),如打過第4行第40個(gè),然后又刪除,然后再打會(huì)重復(fù),導(dǎo)致后面第4行的內(nèi)容會(huì)變化
If lblEgg((Hang + 5) Mod 8).Caption "" Then
lblEgg((Hang + 5) Mod 8).Caption = "" ''lblEgg((Hang - 3) Mod 8).Caption = ""
For i = Num - 44 * 3 - 39 + 1 To Num - 44 * 2 - 39 + 1
Unload lblOK(i)
Next
lblEgg((Hang + 4) Mod 8).Caption = Mid$(StrText, mNumber * 44 + 1, 44) '(Hang + 4) Mod 7
mNumber = mNumber + 1
End If
End If
If Hang = 6 And No = (44 - 6) Then TypeSPace = True '模擬打字區(qū)的舊文本消失,當(dāng)打到第6行(倒數(shù)第2行),第0行開始消失,Hang-6(前第6行),Hang+2(后第2行)
If lblType((Hang + 2) Mod 8).Caption "" And TypeSPace Then
'TypeHang = Hang + 2
'if typehang=8 then typehang=0
'lblType(Hang - 6).Caption = ""
lblType((Hang + 2) Mod 8).Caption = ""
End If
lblType(Hang).Caption = lblType(Hang).Caption Mid$(txtType.Text, Len(txtType.Text), 1) 'txtType.Text
'Debug.Print txtType.SelStart
'Debug.Print Num
Num = Num + 1
Load lblOK(Num)
If Mid$(lblType(Hang).Caption, Len(lblType(Hang).Caption), 1) = Mid$(lblEgg(Hang).Caption, Len(lblType(Hang).Caption), 1) Then
lblOK(Num).BackColor = vbGreen '正確就用綠色,65280
lblOK(Num).Tag = 1
mTrue = mTrue + 1 '正確的字?jǐn)?shù)
lblTrue.Caption = "對:" mTrue
Else
lblOK(Num).BackColor = vbRed '錯(cuò)誤就用紅色,255
lblOK(Num).Tag = 0
mFalse = mFalse + 1 '錯(cuò)誤的字?jǐn)?shù)
lblFalse.Caption = "錯(cuò):" mFalse
End If
'算出正確率
mTF = mTrue / (mTrue + mFalse) * 1000
lblTF.Caption = mTF
With lblOK(Num)
If Num Mod 44 = 1 Then
'Select Case Num
'Case 44 * 1 + 1
'Hang = Num \ 44 '打完一行,就開始打下一行
.Left = 50
Else
.Left = lblOK(Num - 1).Left + lblOK(Num - 1).Width '上一個(gè)之后
End If
If (Num - 1) \ 44 = 1 Then '如果不是第一行,每行44個(gè)字
'.Top = 50 + (Num - 1) \ 30 * 180 'TextHeight(Mid$(txtType.Text, Len(lblType.Caption), 1))
'.Top = lblOK(Num - 30).Top + lblOK(Num - 30).Height ' 180 + 60
.Top = lblEgg(Hang).Top
Else
.Top = 0 '50
End If
.Caption = Mid$(lblEgg(Hang).Caption, Len(lblType(Hang).Caption), 1)
.AutoSize = True
.Visible = True
End With
Line1.X1 = lblOK(Num).Left + lblOK(Num).Width: Line1.X2 = lblOK(Num).Left + lblOK(Num).Width
Line1.Y1 = lblOK(Num).Top: Line1.Y2 = lblOK(Num).Top + 250
If Num Mod 44 = 0 And Num 0 Then 'Hang 0
Line1.X1 = lblType(Hang + 1).Left - 1: Line1.X2 = lblType(Hang + 1).Left - 1
Line1.Y1 = lblType(Hang + 1).Top: Line1.Y2 = lblType(Hang + 1).Top + 250
End If
End Sub
圖像二值化的目的是最大限度的將圖象中感興趣的部分保留下來,在很多情況下,也是進(jìn)行圖像分析、特征提取與模式識別之前的必要的圖像預(yù)處理過程。這個(gè)看似簡單的問題,在過去的四十年里受到國內(nèi)外學(xué)者的廣泛關(guān)注,產(chǎn)生了數(shù)以百計(jì)的閾值選取方法,但如同其他圖像分割算法一樣,沒有一個(gè)現(xiàn)有方法對各種各樣的圖像都能得到令人滿意的結(jié)果。
本文針對幾種經(jīng)典而常用的二值發(fā)放進(jìn)行了簡單的討論并給出了其vb.net 實(shí)現(xiàn)。
1、P-Tile法
Doyle于1962年提出的P-Tile (即P分位數(shù)法)可以說是最古老的一種閾值選取方法。該方法根據(jù)先驗(yàn)概率來設(shè)定閾值,使得二值化后的目標(biāo)或背景像素比例等于先驗(yàn)概率,該方法簡單高效,但是對于先驗(yàn)概率難于估計(jì)的圖像卻無能為力。
2、OTSU 算法(大津法)
OSTU算法可以說是自適應(yīng)計(jì)算單閾值(用來轉(zhuǎn)換灰度圖像為二值圖像)的簡單高效方法。1978 OTSU年提出的最大類間方差法以其計(jì)算簡單、穩(wěn)定有效,一直廣為使用。
3、迭代法(最佳閥值法)
(1). 求出圖象的最大灰度值和最小灰度值,分別記為Zl和Zk,令初始閾值為:
(2). 根據(jù)閾值TK將圖象分割為前景和背景,分別求出兩者的平均灰度值Z0和ZB:
式中,Z(i,j)是圖像上(i,j)點(diǎn)的象素值,N(i,j)是(i,j)點(diǎn)的權(quán)值,一般取1。
(3). 若TK=TK+1,則所得即為閾值,否則轉(zhuǎn)2,迭代計(jì)算。
4、一維最大熵閾值法
它的思想是統(tǒng)計(jì)圖像中每一個(gè)灰度級出現(xiàn)的概率 ,計(jì)算該灰度級的熵 ,假設(shè)以灰度級T分割圖像,圖像中低于T灰度級的像素點(diǎn)構(gòu)成目標(biāo)物體(O),高于灰度級T的像素點(diǎn)構(gòu)成背景(B),那么各個(gè)灰度級在本區(qū)的分布概率為:
O區(qū): i=1,2……,t
B區(qū): i=t+1,t+2……L-1
上式中的 ,這樣對于數(shù)字圖像中的目標(biāo)和背景區(qū)域的熵分別為:
對圖像中的每一個(gè)灰度級分別求取W=H0 +HB,選取使W最大的灰度級作為分割圖像的閾值,這就是一維最大熵閾值圖像分割法。
VB很實(shí)用哦,建議直接學(xué)vb2008及以上版本的
vb.net入門經(jīng)典----讓你入門
Visual Basic 2008高級編程---搞懂該書你就畢業(yè)了
Vb2008以上版本寫程序效率非常高,智能化程度高,完全不遜色C#