[VB.NET] Kleuren herkenning

Pagina: 1
Acties:

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 14-11 09:45
Hoi,

Ik wil een programma schrijven dat uitzoekt op welke plek (x,y) een bepaald gekleurde pixel zit, in een relatief eenvoudige image. De image heeft maar een paar kleuren. Ik heb wat gegoogled en vond dit. Nou gaat dat over barcodes en is de source niet beschikbaar, dus kan ik er niet zoveel mee.
Ik zat te denken van: ga pixel voor pixel van links naar rechts en kijk welke kleur die is.
Ga verder op de volgende regel
Zou iemand mij de goede kant op kunnen helpen?

[ Voor 12% gewijzigd door ikkuhqhp op 14-06-2008 17:05 ]


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

De Bitmap klasse in System.Drawing heeft een GetPixel(int x, int y) methode. Daarmee kan je de kleur van een bepaalde pixel ophalen. Aangezien je de hele afbeelding wilt doorzoeken op zoek naar die kleur zou ik gewoon met een nested loop alle pixels afgaan totdat je de pixel met de juiste kleur hebt gevonden.

[edit]
Voorbeeldje, niet getest:
C#:
1
2
3
4
5
6
7
8
9
10
11
Color currentColor;
Bitmap bitmap = new Bitmap(filename);

for (int y = 0; y < bitmap.Height; y++)
{
    for (int x = 0; x < bitmap.Width; x++)
    {
        currentColor = bitmap.GetPixel(x, y);
        // Vergelijk de kleuren hier en doe er wat leuks mee
    }
}

[ Voor 25% gewijzigd door AtleX op 14-06-2008 17:16 ]

Sole survivor of the Chicxulub asteroid impact.


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 00:33
Kijk eens naar de Bitmap class in .NET

[ Voor 0% gewijzigd door Daspeed op 14-06-2008 17:11 . Reden: te laat... ]


  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 14-11 09:45
Ik ben er mee aan het spelen, het lijkt te werken!
mijn werkende code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
        image = Bitmap.FromFile("C:\image.bmp")
        ref = Bitmap.FromFile("C:\ref.bmp")
        refcolor = ref.GetPixel(0, 0)
        For i = 0 To antirobot.Height - 1
            For ii = 0 To antirobot.Width - 1
                currentcolor = antirobot.GetPixel(ii, i)
                If currentcolor = refcolor Then
                   MsgBox("# Gevonden! op x,y: " & ii & ", " & i )
                End If
            Next
        Next

Hier heb ik de gezochte kleur dus op pixel 0,0 in ref.bmp gedaan!

[ Voor 89% gewijzigd door ikkuhqhp op 15-06-2008 13:11 ]