2013-06-20 178 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 結束子