Forum: PC-Programmierung Bildschrimfarben erkennen/abfragen


von Dd D. (neo120484)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Alle Pixel addieren und Mittelwert bilden.
Jeweils getrennt in den 3 Farbkanälen: Rot, Grün, Blau

von Dd D. (neo120484)


Lesenswert?

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

von Andreas B. (Gast)


Lesenswert?

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

von Andreas B. (Gast)


Lesenswert?

>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

von Dd D. (neo120484)


Lesenswert?

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..

von Andreas B. (Gast)


Lesenswert?

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

von Dd D. (neo120484)


Lesenswert?

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?

von Dd D. (neo120484)


Angehängte Dateien:

Lesenswert?

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..

von Rolf Magnus (Gast)


Lesenswert?

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.

von Dd D. (neo120484)


Lesenswert?

oh danke dir das hab ich nicht wirklich gewußt/beachtet werd ich später
mal probieren..

von Bartli (Gast)


Lesenswert?

> 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.

von Dd D. (neo120484)


Angehängte Dateien:

Lesenswert?

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..

von Andreas B. (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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

von Rolf Magnus (Gast)


Lesenswert?

Hier noch ein Link zum Thema:
http://divxstation.com/article.asp?aId=151

von Dd D. (neo120484)


Lesenswert?

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
Noch kein Account? Hier anmelden.