2013-06-20 273 views
1

我是Visual Basic的新手,我已经在matlab中完成了图像处理。但从这一刻起,需要Visual Basic中的图像处理。好的,我已经能够显示图像并阅读转换为灰度。然而,我的图像是JPEG格式,我一直运行在几个灰度转换器教程中的BMP图像的位图功能,我的代码不断尝试处理JPEG格式的错误。我如何阅读jpeg并执行灰度级操作。这是代码。将RGB转换为灰度?

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 

我recieving的错误是

ERROR1:值类型的 'WindowsApplication1.jpeg' 不能被转换为 'System.Drawing.Image对象'。

当我用bmp图像实现它时,它完美地工作,但不能用jpeg。对于这个问题的任何帮助,我将不胜感激。谢谢

回答

0

jpeg在哪里定义?这是你正在使用的VB.Net库吗?还是你自己写了这个对象?

.Net有一些内置JPEG事业,你可能要检查了这一点:

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.jpegbitmapdecoder.aspx

有了这个,你应该能够访问像素,从那里你的背景颜色操作应允许您使用它来完成您正在寻找的内容。

+0

显示位图图像,该代码是在此格式 –

+0

要显示位图图像,该代码是在这个格式如上图所示,但对于上述与DIM维代码的第二部分,我取代JPEG和使用位图和它的工作为BMP图像。所以,我已经访问过该网站,因为我已经明白过来,第二个源代码文件OON该页面以转换为JPEG它是在视觉basic.Thanks –

0

我会建议看像一个像AForge或OpenCV的图像库。它们内置了很多有用的功能(例如几种不同的RGB到灰度算法)。 OpenCV是用C++编写的,因此它可能比你在VB中编写的任何东西都要快。我不确定AForge,但我认为它是用C#编写的。

+0

不幸的是,先生,我不熟悉C++ accepatable。这是针对学校实验室的准备工作,实验室领导者只熟悉用于图像处理而非matlab的Visual Basic。所以我拥有了我在matlab中所需要的所有东西,但在VB中却没有。作为一个工程专业,我只是处理matlab和c。 –

+0

你不需要知道C++。您只需导入OpenCV DLL并从VB中调用它。 –

2

只是改变:

Dim bm As New jpeg(PictureBox1.Image) 

要:

Dim bm As New Bitmap(PictureBox1.Image) 

这将是更快,虽然使用嘉洛斯是这样的:

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 
0

有没有这样的在vb.net中输入jpeg,所以行:

Dim bm As New jpeg(PictureBox1.Image) 

应由

Dim bm as Bitmap = New Bitmap(PictureBox1.image) 
-1

代替这里是一个很好代码

子BlackAndWhite() 昏暗X为整数 昏暗ý作为整数 昏暗红色作为字节 昏暗绿色作为字节 Dim blue As Byte For x = 0 To I.Width - 1 For y = 0 To 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 = I 结束子