AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gleiche Listboxeinträge zählen

Ein Thema von Erebos · begonnen am 18. Jan 2010 · letzter Beitrag vom 18. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Erebos

Registriert seit: 3. Jan 2010
12 Beiträge
 
#1

Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 09:07
Hey Leute ich habe ein Probelm ich möchte ein Programm schreiben, welches erkennt wie oft eine Farbe in einem Bild vorkommt.
Hierfür durchlaufe ich das geladene Bild und lese jeden Pixel einzelnt aus und speichere ihn in einer Listbox. Nun möchte ich, das gezählt wird wie oft zum Beispiel die Farbe Grün (durch diesen Wert in der LB gespeichert: 3955356) vorkommt. Und am besten wie oft jede Farbe vorkommt. Danach könnt man eine Häufigkeitsanalyse machen "Was sind die 10 häufigsten Farben des Bildes" oder so...
Ich komme einfach nicht weiter hat jemand von euch eine Idee?

PS: Es ist zu beachten das es verdammt viele Einträge sind ...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 09:16
Zitat von Erebos:
Hey Leute ich habe ein Probelm ich möchte ein Programm schreiben, welches erkennt wie oft eine Farbe in einem Bild vorkommt.
Hierfür durchlaufe ich das geladene Bild und lese jeden Pixel einzelnt aus und speichere ihn in einer Listbox.
Das erinnert mich daran:
Zitat:
Herr Schmidt, ich habe gehört sie können wahnsinning schnell zählen.
Ja, das ist richtig. Wollen sie mich auf die Probe stellen?
Okay, wieviele Ameisen sind dort in dem Ameisenhaufen?
456615 !
Okay, wie haben sie das gemacht?
Ganz einfach: Beine gezählt und durch 6 geteilt!


Also verzichte auf die Listbox (was soll der user damit anfangen??) und zähle die Farben einfach direkt

also zwei schleifen machen, und den Pixel mit der gesuchten Farbe vergleichen. Wenn's passt einen Zähler um 1 erhöhen.

Bei Bildern mit geringer Farbtiefe kannst du auch Bucketsort verwenden, dann hast du direkt alle Farben die im Bild vorkommen mit der entsprechenden Häufigkeit
  Mit Zitat antworten Zitat
Erebos

Registriert seit: 3. Jan 2010
12 Beiträge
 
#3

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 10:38
^^ Ich hätte einfach nicht schreiben sollen was ich vorhabe, sondern nur wo das Problem is

Zitat:
Also verzichte auf die Listbox (was soll der user damit anfangen??) und zähle die Farben einfach direkt Wink
Die Listbox hat schon ihren Sinn ... Ich entscheide das jetzt einfach mal so

Zitat:
also zwei schleifen machen, und den Pixel mit der gesuchten Farbe vergleichen. Wenn's passt einen Zähler um 1 erhöhen.
Es gibt keine gesuchte Farbe ... Alle Farben sollen gesucht werden und die Häufigkeit wird in Pixeln angegeben

Zitat:
Bei Bildern mit geringer Farbtiefe
Handelt sich leider nicht um Bilder mit geringer Farbtiefe...

Danke trotzdem ich werd selbst noch ein bisschen was versuchen!
WICHTIG ist aber das die Listbox benutzt wird und ich suche eingentlich nur eine Prozedure die gleiche Listboxeinträge zusammenfasst ... dann wäre ich glücklich

Mfg

Erebos
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 10:49
Ich würde nicht direkt in die Listbox schreiben, sondern erstmal in eine sortierte Stringliste. Wenn alles drin steht kannst Du einfach durch die Liste gehen, die gleichen Einträge zählen und in Deine Auswahl setzen.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Erebos

Registriert seit: 3. Jan 2010
12 Beiträge
 
#5

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 11:01
Eine gute Idee ich werds gleich mal probieren danke
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 11:07
Hallo,

willst du wirklich alle Pixel in die ListBox packen ?
Du weisst schon, dass der Speicher einer ListBox begrenzt ist.

Ich würde das etwas anders machen
(deine ListBox kannst du ja drinlassen )

Delphi-Quellcode:
type
  TColorItem = class
    Color: TColor;
    Number: Integer;
  end;

type
  TColorItemList = class(TObjectList)
    private
     // mit for-Schleife nach der Farbe suchen
     // NIL, wenn nicht gefunden
      function FindColorItem(theColor): TColorItem;
    public
      procedure AddToColor(theColor: TColor);
  end;

procedure TColorItemList.AddToColor(theColor: TColor);
var
  ColorItem: TColorItem;
begin
  ColorItem:= FindColorItem(theColor);
  if ColorItem=NIL then
  begin
    ColorItem:= TColorItem.Create;
    Add(ColorItem);
  end;

  ColorItem.Number:= ColorItem.Number+1;
end;

Heiko
Heiko
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 11:20
Dir ist aber schon bewusst, dass du dann im Extremfall 2^24 = 16.777.216 Einträge in deiner Listbox hast, oder? Bzw. genauer bis zu MIN(Bitmap.Width*Bintmap.Height, 2^24). Es gab mal Zeiten, da ging nicht mehr als 64k Einträge eine ListBox, ich weiss nicht wie das bei neuren Delphis aussieht - von der Übersichtlichkeit mal ganz abgesehen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Erebos

Registriert seit: 3. Jan 2010
12 Beiträge
 
#8

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 11:42
ja ne ich schrumpfe das Bild vorher zusammen und errechne dann den %satz der jeweiligen Farbe ^^ sonst wäre das n bisschen ääähhh ja ...


Hab das jetzt mit der sortierten Stringliste gemacht
-> Ich lese die Pixel in die sortierte Stingliste
-> speicher den ersten String in ner Variable ("Gleich") und vergleiche diesen String solange mit den nächsten in der Liste bis der sich ändert
-> diese Zahl speicher ich in ner Variable(x) lösche dann die ersten x Stings aus der liste
-> Schreibe in die Listbox(Gleich+'ist'+IntToStr(x)+' mal vorhanden)
das is jetzt nur für mich die ausgabe kommt halt noch in % aber das is ja denn nich sonderlich schwer.

Danke für die Hilfe!
Mfg
Erebos
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 12:33
Hallo,

Zitat:
ich weiss nicht wie das bei neuren Delphis aussieht
Das ist eine Beschränkung von Windows.
Umgehen kann man das mit OwnerDraw oder man nimmt einfach den schickeren ListView.

Verstanden habe ich aber immer noch nicht,
wie man (beliebige) Farben mit einer StringList zählt,
aber egal


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Gleiche Listboxeinträge zählen

  Alt 18. Jan 2010, 13:35
Wie man mit einer TStringList Farben zählt:
Farben werden numerisch repräsentiert. Diese Zahl kann man in eine sortierte Stringliste schreiben. Sortiert deshalb, weil alle gleichen Farbeinträge dann nacheinander drinstehen werden. Wenn man mit dem Wegschreiben der Farben fertig ist, geht man in einer Schleife (die Erebos ja beschrieben hat) durch die Liste und zählt halt.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz