Hallo, ich habe folgendes problem ich möchte bei einem Bild welches mir auf meinem PC bildschirm ausgegeben wird das bild in 2 Hälften teilen und dann jeweils links sow wie rechts die vorherschende Farbe rausfinden.. Das ganze soll später dazu dienen ein "Stimmungs Licht" (den Englischen ausdruck lässt mich das forum wegen spam verdacht nicht posten) so wie es in manchen Philips Fernseher verbaut ist anzusteuern.. Leider finde ich immoment keinerlei ansatzt dafür Das ganze soll mit C/C++ realisiert werden da mein bisheriges programm auch mit QT und C++ geschrieben ist und ich dieses Feature später mit einbinden will.. Wäre nett wenn jemand eine idee hätte und mir diese mitteilen könnte.. gruß Dominik
Alle Pixel addieren und Mittelwert bilden. Jeweils getrennt in den 3 Farbkanälen: Rot, Grün, Blau
Danke.. Meine frage war allerdings eher wie frag ich die einzelnen Pixel unter QT ab im moment hab ich den ansatz ein screenshot zu machen und dieses dann mit einem raster auszuwerten (jedes einzelne pixel muß nicht ausgewertet werden da reicht jedes 2/3 ) jedoch befürchte ich das dies später bei filmen doch deutlich zu langsam wäre.. aber wie ich direkt einzelne pixel abfrage weiß ich leider noch nicht
Ich würde das ganz einfach machen... Wiso neu programmieren? es gibt schon viele "Screenshotprogramm", einfach mal auf sf.net nach "screenshot" suchen, erstes Programm könnte ein Treffer sein: http://sourceforge.net/project/showfiles.php?group_id=54363 ich denke da solltest du genug Source finden die du verwenden kannst. mfg Andreas
>jedoch befürchte ich das dies später bei filmen doch deutlich zu >langsam wäre.. iTunes schafft auf meinem PC im Fenster von ca. 1100 * 1000px eine Visualisierung mit bis zu 20 Frames /s (3GHz P4), eine Schleife die nur den durchschnitt ausrechnen muss sollte um einiges schneller sein... mfg Andreas
danke für die Antwort also das screenshot zu erzeugen das ist kein problem da hab ich bereits da QT hier ne schöne Klasse mit zugehöriger Methode anbietet allerdings sind das halt verschwendete resourcen erst ein komplettes screenshot aufzunehmen um hinterher effektiv nur 50% davon zu nutzen da ich ja nur ja nur jedes 2 oder 3 pixel abfrage..
Hab deine Frage falsch verstanden... Aber ich denke Screenshot machen ist die schnellste Lösung. Du kannst wahrscheinlich nicht direkt auf den Grafikspeicher zugreifen (vor allem nicht auf einen Bereich vom OS oder einem anderen Programm). Es gibt Programme die Screenshots nur von bestimmten Bereichen machen, ich weiss aber nicht wie das funktioniert. Eventuell nach so einem Programm suchen. Aber ich denke wenn du jeden Pixel einzel lesen willst wird das einiges länger dauern als wenn du ein Screenshot machst. Und 2.25 MB RAM (bei 1280*1024) werden ja hoffentlich noch frei sein;-) Für welches OS ist denn das ganze? Windows / Linux oder unabhängig? Solange du nur mit QT arbeitests ist es sicher unabhängig... mfg Andreas
ja ich bin mitlerweile soweit das ich ein screenshot von genau einem pixel mache dies mach ich in länge wie breite alle 8 pixel und speicher die RGB werte in einem Array danach bilde ich den mittelwert aller rottöne, aller blautöne und aller grüntöne. Mit disem Mittelwert steuer ich dann meine RGB Led's an allerdings hab ich da jetzt noch einen kleinen knoten im kopf Licht mischt sich ja Subtraktiv und die Farben am PC aditiv kann ich dann einfach meine Farbgebung vom PC invertieren also schwarz wird weiß weiß wird schwarz oder wie muß ich das umrechnen?
So hier mal mein erstes Ergebniss allerdings find ichs nicht so super muß mir da noch was einfallen lassen um die farben etwas besser zu bewerten... im moment bilde ich nur den mittelwert der rechten sowie linken bildschirmhälfte Hab dazu mal ein sehr kräftiges bild genommen..
Bei Screenshots muß man aber auch schauen, ob da auch Overlays dabei sind. Videos werden in der Regel in einem Overlay abgespielt, und zumindest früher wurden diese bei Screenshots ausgelassen. Man hat dann in diesem Bereich nur eine einfarbige Fläche gesehen. Ich weiß nicht, wie es heute ist.
oh danke dir das hab ich nicht wirklich gewußt/beachtet werd ich später mal probieren..
> im moment bilde ich nur den mittelwert der rechten sowie linken
bildschirmhälfte
Nur so eine Idee: du kannst ja mal probieren, ob du mit dem Median auf
ein Ergebnis kommst, das dir besser gefällt.
Also Median brachte mir kein so schönes Ergebnis jdeoch hast du mich auch eine idee gebracht das mal mit der Gaussschen Normalverteilung zu probieren.. Da hat man zich Semester höhere Mathematik aber sowas lernt man nicht . z z z im Anhang noch die Bilder mit Median..
du könntest auch nur den Mittelwert des Farbenbereiches nehmen der am meisten vorkommt. Also du machst eine Einteilung in sagen wird mal 16 Farben. Jetzt wären auf deiner Linke Hälfte des Bildes etwa 35% hellblau. Dann Rechnest du den Mittelwert dieser blau aus. Somit bekämst du kein kein Braun, da die Felsen und der Himmel ignoriert würden. Ich habs aber nicht probiert und weiss nicht obs so funktioniert.. mfg Andreas
Vielleicht würde das geometrische Mittel helfen, aber das wäre wohl etwas schwierig zu berechnen. Andere Variante: keine ganze Bildhälfte nehmen, sondern links und rechts nur jeweils einen relativ schmalen Streifen, denn sonst zählt ja selbst die Bildmitte noch zu den Farben, die außen neben dem Rand von deinen Lichtern erzeugt werden. Weitere Möglichkeit: Das Bild nicht in zwei Hälften, sondern vier Quadranten unterteilen. Oft hat man ja eine recht scharfe horizontale Linie, an der sich die Farben abrupt ändern (z.B. Horizont). Darüber dann einen Durchschnitt zu berechnen, klappt natürlich nur mäßg gut.
Zum Thema "unterschiedliche Bewertung der Farben": vielleicht hilft es Dir zu wissen, daß die Bildsensoren bei Digitalkameras grün stärker gewichten als rot und blau. Dies liegt wohl daran, daß die menschliche Psyche grün als stärker empfindet als die beiden anderen Grundfarben. Von 4 Pixeln sind zwei grün, eines rot und eines blau. Gruß Markus
Danke den link kenn ich schon aber leider rückt der der das gemacht hat den Quellcode seines Filters nicht raus .. zudem hab ich leider gar keine ahnung von DirectX (DirectShow)Filter programmieren und ich find auch keine gescheites tutorial welches mir darin weiter helfen könnte.. kenn von euch jemand ein gutes tutorial /beispiel wie so ein Filter mit DirectShow programmiert wird? gruß Dominik
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.