 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Sunny Guest
|
Posted: Wed Feb 01, 2006 6:01 pm Post subject: RGB -> YUV + Histogramm |
|
|
Hey,
ich habe ein Programmierproblem und ich hoffe dass ihr mir helfen
könnt.
1. Ich möchte ein Bild von RGB nach YUV umformen. Ich habe es mit
OIpenCV versucht, aber eigentlich möchte ich OpenCv umgehen.
Die Formeln sind folgende:
Y = 0,3 * R +0,6*G+0,1*B
U = B-Y
V=R-Y
Wie schreibe ich das am besten im Code, wenn ich mein Image i
reinbekomme. und das darauf anwenden will?
2. Anschließend möchte ich aus den YUV Werten 2 Histogramme machen.
Eins für Y und eines für U. Diese sollen gespeichert werden und bei
Bedarf aufgerufen werden können.
Hoffentlich habt ihr ne Idee:
Vielen Dank
E
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Steffen Christgau Guest
|
Posted: Wed Feb 01, 2006 7:01 pm Post subject: Re: RGB -> YUV + Histogramm |
|
|
Sunny schrieb:
| Quote: | [Farbraumprobleme]
Hoffentlich habt ihr ne Idee:
Vielen Dank
|
Auf http://www.efg2.com/Lab/ finden sich viele Informationen zum Thema
Bildverarbeitung oder zum Thema Farben. Da wirst du sicherlich was finden.
Ciao... Steffen
P.S.: Du solltest deinen real name angeben.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Michael Hofmann Guest
|
Posted: Thu Feb 02, 2006 4:22 am Post subject: Re: RGB -> YUV + Histogramm |
|
|
Sunny wrote:
| Quote: | 1. Ich möchte ein Bild von RGB nach YUV umformen. Ich habe es mit
OIpenCV versucht, aber eigentlich möchte ich OpenCv umgehen.
Die Formeln sind folgende:
Y = 0,3 * R +0,6*G+0,1*B
U = B-Y
V=R-Y
Wie schreibe ich das am besten im Code, wenn ich mein Image i
reinbekomme. und das darauf anwenden will?
|
Zunaechst stellt sich die Frage, wie Deine Bilddaten ueberhaupt im
Speicher vorliegen.
Wenn ich mal vermuten darf, dass Du drei 8-bit Kanaele hast - einen fuer
Rot, einen fuer Gruen und einen fuer Blau - dann machst Du fuer jeden
Bildpunkt genau das, was Du oben schon geschrieben hast und speicherst
das jeweilige Ergebnis in den Ausgabekanal.
Das ganze ist eine punktweise Operation, also z.B. mit je einem Iterator
(oder gar Zeiger) pro Kanal auf Ein- und Ausgabe recht einfach zu erledigen.
Casts in entsprechendes Fliesskommaformat und Rueckrundung zwecks
Quantisierung noch beachten.
| Quote: | 2. Anschließend möchte ich aus den YUV Werten 2 Histogramme machen.
Eins für Y und eines für U. Diese sollen gespeichert werden und bei
Bedarf aufgerufen werden können.
|
Du erstellst fuer je einen Kanal eine feste Anzahl N von "Bins" (bspw.:
std::vector<AccType> bin( N, 0 )), iterierst wiederum punktweise durch
die Pixel und inkrementierst fuer den jeweiligen Datenwert den
Akkumulator des entsprechenden Bin. Im Anschluss kannst Du noch
entsprechend normalisieren oder auch nicht.
Gruss,
Michael
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|