Farbe von Pixeln ändern.

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Turbine.

    Farbe von Pixeln ändern.

    Hallo,
    und zwar folgendes:
    Ich habe Datenblätter. Diese möchte ich einscannen und dann durch Texterkennung erfassen.
    Nun das Probmen: DIese Blätter haben keinen weißen Hintergrund, sondern verschiedene grautöne und logos.
    Jetzt brauche ich ein Programm, das aus allem grau weiß macht.
    Ich muss also eine Schwelle vorgeben. Alles was darunter ist wird weiß alles darüber schwarz
    Habe zu diesem Thema auch schon was gefunden:

    VB.NET-Quellcode

    1. For x As Int32 = 0 To Bild.Width - 1
    2. For y As Int32 = 0 To Bild.Height - 1
    3. Farbe = Bild.GetPixel(x, y)
    4. If MW_Farbe = (CInt(Farbe.R) + CInt(Farbe.G) + CInt(Farbe.B)) / 3 < Schwelle Then
    5. (MW_Farbe = ((CInt(Farbe.R) = 255) + CInt(Farbe.G) = 255 + CInt(Farbe.B)) = 255 / 3)
    6. Else
    7. MW_Farbe = ((CInt(Farbe.R) = 0) + (CInt(Farbe.G) = 0) + (CInt(Farbe.B)) = 0) / 3
    8. End If
    9. Next
    10. Next


    VB.NET-Quellcode

    1. Bild.SetPixel(x,y,Color.Black)
    2. Bild.SetPixel(x,y,Color.White)

    Bild ist dann praktisch meine PicturBox.
    Aber das Bild.SetPixel / Bild.GetPixel ist irgendwie falsch...
    Habe jetzt mal nen anderen Dateinamen wie das ausgangsbild genommen.
    Jetzt ist der Fehler weg, aber leider passsiert mit dem Bild garnichts.
    Eigendlich sollte jetzt das schwarz in irgendeine Farbe umgewandelt werden, aber in dem neuen Bild ist es auch weder schwarz...

    Mein Code

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private bmp As Bitmap
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. bmp = New Bitmap("C:\test.bmp")
    5. For y As Long = 0 To bmp.Height - 1
    6. For x As Long = 0 To bmp.Width - 1
    7. If bmp.GetPixel(x, y) = Color.Black Then 'Geht schneller, da es eine Konstante ist
    8. bmp.SetPixel(x, y, Color.FromArgb(255, 185, 15)) 'neue Farbe setzen
    9. End If
    10. Next x
    11. Next y
    12. bmp.Save("C:\test1.bmp") 'Bitmap abspeichern
    13. bmp = Nothing 'und aus dem ram werfen, wenn du In der Sub noch was machen willst.
    14. MsgBox("fertig")
    15. End Sub
    16. End Class
    Ich denke, Du willst Dein Bild "diskriminieren".
    Grundsätzlich geht das so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Dim bild As Bitmap = PictureBox1.Image
    3. Dim farbe As Color
    4. Dim mw_farbe As Integer
    5. Dim Schwelle As Integer = 128 ' hier Deinen Wert vorgeben
    6. For x As Int32 = 0 To bild.Width - 1
    7. For y As Int32 = 0 To bild.Height - 1
    8. farbe = bild.GetPixel(x, y)
    9. mw_farbe = (CInt(farbe.R) + CInt(farbe.G) + CInt(farbe.B)) / 3
    10. If mw_farbe < Schwelle Then
    11. bild.SetPixel(x, y, Color.Black)
    12. Else
    13. bild.SetPixel(x, y, Color.White)
    14. End If
    15. Next
    16. Next
    17. End Sub

    Problem: Es dauert unendlich lange.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,
    danke, das frutzt so perfekt.

    Jetzt gehts an die Texterkennung ;)
    Dafür selbst einen Algorimus zu schreiben will ich nicht unbedingt.
    Da gibts ja auch so einige fertige Sachen.
    Hat jemand schon mal was mit dem hier machen:
    ocrtools.com
    Das habe ich jetzt schon alles instaliert und so, aber es gibt keinen Text aus.
    Wenn jemand damit schon was gemacht hat möge er sich melden...
    Kann mir sonst noch jemand was fertiges empfehlen?
    Das jemand seinen eigendnen Algorithmus irgendwo zu verfügung stellt ist ja auch recht unwarscheinlich...
    Hallo,
    danke für den Link.
    Aber irgendwie blicke ich da nicht durch.
    Hat da jemand einen kleines Demoprojekt irgendwo rumgammeln, das er mal zu überungszwecken bereitstellen könnte.

    Bei dem OCR Tools gibts auch nichts neues...
    Da komm ich auch nicht weiter.