mikrocontroller.net

Forum: PC-Programmierung Bildschrimfarben erkennen/abfragen


Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dd Dd (neo120484)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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..

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dd Dd (neo120484)
Datum:

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

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dd Dd (neo120484)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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..

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Dd Dd (neo120484)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.