使用VB.NET将bmp图像转换为二进制图像的代码
下面的代码将灰度图像转换为二值图像,但不起作用,没有错误。。。我需要帮助来确定为什么代码不工作…我正在使用vb,net 2012使用VB.NET将bmp图像转换为二进制图像的代码,vb.net,Vb.net,下面的代码将灰度图像转换为二值图像,但不起作用,没有错误。。。我需要帮助来确定为什么代码不工作…我正在使用vb,net 2012 Dim mp3 As Double mp2 = 0 Dim i, j As Integer Dim img As New Bitmap(600, 600) ' PictureBox2.Cls() For i = 0 To w For j = 0 To h ab(i, j) = 0
Dim mp3 As Double
mp2 = 0
Dim i, j As Integer
Dim img As New Bitmap(600, 600)
' PictureBox2.Cls()
For i = 0 To w
For j = 0 To h
ab(i, j) = 0
zxc(i, j) = 0
zxc1(i, j) = 0
ssc(i, j) = 0
Next j
Next i
For i = 0 To w - 17 Step 16
For j = 0 To h - 17 Step 16
mp1 = 0
For k = i To i + 15
For l = j To j + 15
mp1 = mp1 + imageArray(k, l)
Next l, k
mp1 = mp1 / (16 ^ 2)
For k = i To i + 15
For l = j To j + 15
If imageArray(k, l) >= mp1 Then
ssc(k, l) = 255
Else
ssc(k, l) = 0
End If
img.SetPixel(k, l, Color.FromArgb(ssc(k, l), ssc(k, l), ssc(k, l)))
Next l, k
Next j
PictureBox2.Refresh()
Next i
mp3 = 0 : nd = 1
For k = 0 To w
For l = j To h
mp3 = mp3 + imageArray(k, l)
nd = nd + 1
Next l, k
mp3 = mp3 / nd
For k = 0 To w
For l = j To h
If imageArray(k, l) >= mp3 Then ssc(k, l) = 255 Else ssc(k, l) = 0
img.SetPixel(k, l, Color.FromArgb(ssc(k, l), ssc(k, l), ssc(k, l)))
Next l, k
mp3 = 0 : nd = 0
For k = i To w
For l = 0 To h
mp3 = mp3 + imageArray(k, l)
nd = nd + 1
Next l, k
mp3 = mp3 / nd
For k = i To w
For l = 0 To h
If imageArray(k, l) >= mp3 Then ssc(k, l) = 255 Else ssc(k, l) = 0
img.SetPixel(k, l, Color.FromArgb(ssc(k, l), ssc(k, l), ssc(k, l)))
Next l, k
hpp = 0
PictureBox2.Image = img
End Sub
。。。。。。。加载映像的代码正在工作,但我不知道它是否正确存储了数组的值,如下所示
Dim ofd As New OpenFileDialog
ofd.Filter = "Bitmap files (*.bmp)|*.bmp"
If ofd.ShowDialog = DialogResult.OK Then
If ofd.FileName <> String.Empty Then
Me.PictureBox1.Image = Bitmap.FromFile(ofd.FileName)
End If
End If
Dim img As New Bitmap(ofd.FileName)
Dim imageArray(img.Width, img.Height) As Integer
Dim i, j As Integer
Dim k As Double
For i = 0 To img.Width - 1
For j = 0 To img.Height - 1
Dim pixel As Color = img.GetPixel(i, j)
imageArray(i, j) = pixel.ToArgb()
z(i, j) = imageArray(i, j)
k = k + imageArray(i, j)
Next j
Next i
End Sub
Dim ofd As New OpenFileDialog
ofd.Filter=“位图文件(*.bmp)|*.bmp”
如果ofd.ShowDialog=DialogResult.OK,则
如果ofd.FileName String.Empty,则
Me.PictureBox1.Image=位图.FromFile(ofd.FileName)
如果结束
如果结束
将img设置为新位图(ofd.FileName)
Dim imageArray(img.Width,img.Height)为整数
作为整数的Dim i,j
把k调成双色
对于i=0至img.宽度-1
对于j=0至惯性高度-1
将像素变暗为颜色=img.GetPixel(i,j)
imageArray(i,j)=pixel.ToArgb()
z(i,j)=图像阵列(i,j)
k=k+imageArray(i,j)
下一个j
接下来我
端接头
试试这个功能
Public Shared Function GetArrayFromImage(image As Image) As Byte()
If image IsNot Nothing Then
Dim ic As New ImageConverter()
Dim buffer As Byte() = DirectCast(ic.ConvertTo(image, GetType(Byte())), Byte())
Return buffer
Else
Return Nothing
End If
End Function
如果使用适当的变量名,会让一些人更容易理解:(这个方法是用来将彩色图像转换为灰度的吗?如果是的话,你可以简单地将a应用于位图。它非常快,还因为它不使用
.SetPixel()
。为什么使用ToArgb()方法在以下代码中始终返回-1值?请提供帮助。对于i=0到img.Width-1对于j=0到img.Height-1 Dim pixel As Color=img.GetPixel(i,j)imageArray(i,j)=pixel.ToArgb()我更改了我的函数,请尝试