C#: Weiße Pixel in einem Bild zählen

N9neNTR

Enthusiast
Thread Starter
Mitglied seit
29.12.2010
Beiträge
624
Moin,

ich komme gerade nicht weiter und hoffe, dass jemand von euch vielleicht eine zündende Idee hat :d
Also, ich nutze C# mit VS2010, sowie EmguCV und Aforge. Bisher läuft alles, so wie es soll, aber jetzt stecke ich an einer Sache fest, die erstmal nur eine Klinigkeit darstellt:
Ich möchte die als weiß dargestellten Pixel auf einer (gedachten) Linie in einem Bild zählen. Also nicht komplett alle weißen Pixel in dem Bild, denn das klappt mit Aforge ziemlich gut, sondern wirklich nur die Pixel auf dieser Linie.

Code:
            TestBox.Image = TestBild;

            IterativeThreshold bifilter = new IterativeThreshold(2, 128);
            // apply the filter
            Bitmap newImage = bifilter.Apply(TestBild);

            ImageStatistics statstest = new ImageStatistics(newImage);
            int[] FFtestGray = stat.GrayWithoutBlack.Values;


            int j = (1 / 2 * newImage.Height);

            
            // Erster Test um die weißen Pixel auf einer Linie in dem Bild zu zählen
            
            for (int i = 0; i < newImage.Width ; i++)
            {

               
                   
                if (newImage.GetPixel(i, j) == Color.White)
                {

                       
                        x++;
                    
                }

            }

Ok, das Bild habe ich irgendwo vorher schon in ein Grauwertbild umgewandelt und mit Imagestatistics bekomme ich schonmal meine Pixel != 0 im gesamten Bild raus und die werden in dem Array FFtestGray gespeichert. Über FFtestGray[255] komme ich dann auf alle weißen Pixel im Bild. Über iterativeThreshold war die Idee, das Bild in ein Binärbild umzuwandeln, sodass ich wirklich nur noch schwarze und weiße Pixel habe. Die gedachte Linie, aus welcher die Pixel gepeichert werden soll, ist in dem Fall die x-Achse in der Mitte des Bildes. Wird ein weißer Pixel gefunden, soll x entsprechend die Anzahl zählen und mir später ausgeben. Leider funktioniert das überhaupt nicht. Irgendwie muss die ImageStatistics ja auch die Werte im Array speichern, von daher müsste es auch möglich sein. Hatte auch schon versucht über setPixel, die anders einzufärben und dann die Farbe asuzugeben, aber das funktioniert auf Grund der Bilderformate leider nicht. Falls jemand einen Tip hat, nur her damit!
Vielen Dank schonmal für eure Hilfe

Grüße

N9ne
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wurde das Problem schon gelöst? Wenn nicht:
Wenn deine Linie nur horizontal/vertikal verläuft, ist es doch trivial: Dann hast du die x/y Start/Endkoordinaten und iterierst einfach über die Pixelreihen/Spalten mit zwei for-Schleifen und prüfst bei jedem Pixel, ob es weiß (=255) ist.
Falls die Linie auch schräg verlaufen soll:
Definiere auf eine Art und Weise deine Linie (als Polygon, Kontur, etc.) und arbeite wieder mit 2 Schleifen wie in der ersten Variante. Da dabei jedoch der Bereich größer als die Linie ist, musst du vorher prüfen, ob sich das aktuell untersuchte Pixel im Polygon/Kontur/etc. befindet. Andere Ansätze gehen auch, aber erstmal sehen was es auf die hier für Feedback gibt.
 
Moin,

vielen Dank für deine Antwort! Mittlerweile konnte ich es mehr oder weniger gut lösen, finde es zwar unschön, wie ich es gemacht habe, aber es funktioniert - zumindest für horizontale und vertikale Linien. Habe das Bild einfach bis auf eine Linie zusammen geschnitten. Das reicht mir auf jeden Fall erstmal, auch wenn schräg noch nett gewesen wäre.

Grüße
 

Ähnliche Themen

Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh