VB求灰度图转二值化,或者有直接二值化的代码

来源:百度知道 编辑:UC知道 时间:2024/09/23 18:21:09
Option Explicit
Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim aaa As Long
Dim bbb As Byte
Dim i As Integer
Dim j As Integer
Private Sub Command1_Click()
For i = 1 To Picture1.ScaleHeight Step 15
For j = 1 To Picture1.ScaleWidth Step 15
aaa = Picture1.Point(j, i)
R = (aaa Mod 256) '取得红色值
G = (aaa Mod 65536) \ 256 '取得绿色值
B = (aaa Mod 16777216) \ 65536 '取得蓝色值
bbb = R / 3 + G / 3 + B / 3 '取得灰度值
Picture2.PSet (j, i), RGB(bbb, bbb, bbb)
Next j
Next i
End Sub
我着这个代码是转灰度图
求这个代码转二值的代码
或者直接彩图转二值的

先谢谢了,顺便给高手门拜年了,新年快乐!牛年发财

Option Explicit
Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim aaa As Long
Dim bbb As Byte
Dim i As Integer
Dim j As Integer
Private Sub Command1_Click()
For i = 1 To Picture1.ScaleHeight Step 15
For j = 1 To Picture1.ScaleWidth Step 15
aaa = Picture1.Point(j, i)
R = (aaa Mod 256) '取得红色值
G = (aaa Mod 65536) \ 256 '取得绿色值
B = (aaa Mod 16777216) \ 65536 '取得蓝色值
bbb = R / 3 + G / 3 + B / 3 '取得灰度值
If bbb >= 171 Then '这里bbb可作适当改变以获得最佳2值化效果
Picture2.PSet (j, i), RGB(255, 255, 255)
Else
Picture2.PSet (j, i), RGB(0, 0, 0)
End If
Next j
Next i
End Sub

用 VB 来直接操作 bmp 比较麻烦,如果允许用 Matlab 的话就方便许多。。。

首先,原程序最好写成bbb = ( R + G + B ) / 3,否则会有误差。
其次,如果想转二值,只需把
Picture2.PSet (j, i), RGB(bbb, bbb, bbb)
改成
If bbb>127 Then bbb=255 Else bbb=0
Picture2.PSet (j, i), RGB(bbb, bbb, bbb)

转化后你要懂BMP的格式才能转啊

用point 方