我是Visual Basic的新手,我以前在matlab中完成了图像处理。但到目前为止,还需要在Visual Basic中进行图像处理。好的,我已经能够显示图像并在转换为灰度时读取。然而,我的图像是jpeg格式,并且我继续在几个灰度转换器教程中仅针对bmp图像运行到Bitmap函数中,并且我的代码一直在为JPEG格式的操作尝试产生错误。我如何阅读jpeg并执行灰度操作。这是代码。
Public Class Form1
Private Sub showButton_Click(sender As System.Object, e As System.EventArgs) Handles showButton.Click
' Show the Open File dialog. If the user clicks OK, load the
' picture that the user chose.
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
PictureBox1.Load(OpenFileDialog1.FileName)
End If
End Sub
Private Sub GrayImageButton_Click(sender As System.Object, e As System.EventArgs) Handles GrayImageButton.Click
Dim bm As New jpeg(PictureBox1.Image)
Dim X As Integer
Dim Y As Integer
Dim clr As Integer
For X = 0 To bm.Width - 1
For Y = 0 To bm.Height - 1
clr = (CInt(bm.GetPixel(X, Y).R) + _
bm.GetPixel(X, Y).G + _
bm.GetPixel(X, Y).B) \ 3
bm.SetPixel(X, Y, Color.FromArgb(clr, clr, clr))
Next Y
Next X
PictureBox1.Image = bm
End Sub
我收到的错误是
错误1:“WindowsApplication1.jpeg”类型的值无法转换为“System.Drawing.Image”。
当我使用bmp图像实现它时,它可以完美地工作,但不能使用jpeg。对于这个问题的任何帮助,我将不胜感激。感谢
答案 0 :(得分:2)
只需改变:
Dim bm As New jpeg(PictureBox1.Image)
要:
Dim bm As New Bitmap(PictureBox1.Image)
使用像这样的ColorMatrix 更快:
Private Sub GrayImageButton_Click(sender As System.Object, e As System.EventArgs) Handles GrayImageButton.Click
Dim grayscale As New Imaging.ColorMatrix(New Single()() _
{ _
New Single() {0.299, 0.299, 0.299, 0, 0}, _
New Single() {0.587, 0.587, 0.587, 0, 0}, _
New Single() {0.114, 0.114, 0.114, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1} _
})
Dim bmp As New Bitmap(PictureBox1.Image)
Dim imgattr As New Imaging.ImageAttributes()
imgattr.SetColorMatrix(grayscale)
Using g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height), _
0, 0, bmp.Width, bmp.Height, _
GraphicsUnit.Pixel, imgattr)
End Using
PictureBox1.Image = bmp
End Sub
答案 1 :(得分:0)
jpeg在哪里定义?那是你正在使用的VB.Net库吗?或者你自己写过这个对象?
.Net有一些内置的Jpeg实用程序,您可能需要查看它:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.jpegbitmapdecoder.aspx
有了这个,您应该能够访问像素,从那里您的背景颜色操作应该允许您使用它来完成您想要做的事情。
答案 2 :(得分:0)
我建议看一下像AForge或OpenCV这样的成像库。它们内置了许多有用的功能(例如,几种不同的RGB到灰度算法)。 OpenCV是用C ++编写的,所以它可能比你在VB中编写的任何东西都要快。我不确定AForge,但我认为它是用C#编写的。
答案 3 :(得分:0)
vb.net中没有jpeg
这样的类型,所以行:
Dim bm As New jpeg(PictureBox1.Image)
应替换为
Dim bm as Bitmap = New Bitmap(PictureBox1.image)
答案 4 :(得分:-1)
这是一个很好的代码
Sub BlackAndWhite() Dim x As Integer Dim y As Integer 昏暗的红色作为字节 昏暗的绿色作为字节 昏暗的蓝色作为字节 对于x = 0到I.Width - 1 对于y = 0到I.Height - 1 red = I.GetPixel(x,y).R green = I.GetPixel(x,y).G blue = I.GetPixel(x,y).B I.SetPixel(x,y,Color.FromArgb(蓝色,蓝色,蓝色)) 下一个 下一个 PictureBox1.Image =我 结束子