suchen Sie eine Farbe in einem Bild in c#
Stolperte ich über dieses youtube-video hier http://www.youtube.com/watch?v=Ha5LficiSJM , zeigt jemand tun, der Farberkennung über die AForge.NET Rahmen. Ich würde gerne nachvollziehen, was dieser Autor getan hat, aber ich bin mir nicht sicher, wie Sie einige der Bildverarbeitung.
Scheint es, dass das AForge.NET -framework ermöglicht es Ihnen, ziehen Sie nach unten aus dem video-Quelle und das Bild in einem Bitmap-format. Meine Frage ist kann jemand Punkt mich in die Richtung, oder geben eine Anleitung, wie das zu befragen, ein Bitmap-Objekt zu finden, die bestimmte Farben? (zum Beispiel, wenn es ist 'Rot' oder 'Lila' in das Bild für X Sekunden, ich möchte ein Ereignis auslösen 'ColorDetected' oder so...)
Hat jemand irgendwelche Vorschläge haben, wo Sie anfangen sollen?
Dank,
-R.
EDIT: brauche ich zu Fuß die gesamte Bitmap-Objekt und befragen jedes pixel für die Farbe? Etwa so: http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.getpixel.aspx
InformationsquelleAutor Randster | 2010-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, Sie können immer die GDI+ - Methode.
Jedoch, GetPixel ist eigentlich ziemlich langsam. Versuchen Sie es erstmal so, aber wenn Sie Scannen müssen viele relativ große Bilder kann es nicht für Sie arbeiten. Verwenden Sie In diesem Fall LockBits um einen Zeiger auf einen zusammenhängenden Speicher chunk. Sie können dann in einer Schleife durch das Bild schnell, aber Sie müssen wissen, wie zu manipulieren Zeiger, aber es ist nicht furchtbar kompliziert.
EDIT: Mit LockBits betrachten jedes pixel:
Wenn Ihr Bilder sind gepolstert und am Ende können Sie die BitmapData.Stride-Eigenschaft, um zu Beginn jeder neuen Zeile (sonst werden Sie beim Lesen einige junk und Ihre Abstände werden screwy).
Sicher, ich kann ein Beispiel geben. Es ist jedoch nicht klar aus deinem Beitrag, wie Sie dieses. Sind Sie auf der Suche an jedem pixel in jedem Bild, oder eine, die eine kleine Fläche, etc.?
Oh, Sie bearbeitet deinen post :). Ich Schreibe ein kurzes Beispiel.
Vielen Dank für das Beispiel! Ich werde auf jeden Fall in diese Aussehen.
Yep, tun
InformationsquelleAutor Ed S.
Neben Ed Swangrens Antwort mit
LockBits
können Sie vermeiden, alle Zeiger zusammen. Wenn Sie mit der WPF (oder Zugang zu), können Sie etwas wie das hier tun:Und jetzt können Sie einfach ein reguläres array-scan mit
pixels
ohne Zeiger. Dieses snippet ist ein paar Jahre alt ist und aus einem Projekt, wo ich entwickelte meine eigene AmbiLight-Lösung, so kann es Recht schnell. Wieder, das ist ein paar Jahre alt, also neue Klassen, wieWriteableBitmap
etc. kann besser sein, und vermeiden Sie eine array-Kopie. In meinem zunächst die Lösung, die ich benutzt Zeiger, aber wenn ich herausgefunden, dass es nicht nötig war, wechselte ich.Vereinbart, ich sollte hier Messen Sie zuerst und sehen, was am besten funktioniert. Dank an Euch beide für die Tipps.
Du bist herzlich willkommen 🙂 ich habe gerade vereinfacht den code ein wenig,
BitmapImage
auch.CopyPixels()
...Hi Lasse, können wir behandeln diese Methode für EPS-Bild-format?
Diese Antwort ist veraltet. Ich bin sicher, es gibt einen besseren Weg jetzt.
InformationsquelleAutor Lasse Espeholt