RGB (int) zu S/W byte (char) konvertieren
-
tach auch!
ich hab da mal so ein verständisproblem.
bisher hab ich immer ne lib zum konvertieren von int (RGB) zu char (graustufen) benutzt. aber wie macht man das wirklich?
meine bisherige idee war den int zu splitten in 3 bytes und dann addieren und durch drei teilen ... so also auf eine art "luminanz" zu kommen. aber irgendwie funzt das net. (oder mein algo ist falsch).
hat jemand ne gute lösung / ne richtige lösung oder nen link dazu?
danke!
ich muss was kleines bauen was auf ne "diskette" (1,2 mb) passt (mit kernel und distri) da ist kein platz für libs.. ausserdem will ichs mal verstehen !thx im vorraus!
-
öhm.. das müsste eignedlich so funktionieren...
aber vielleicht hast du ja die daten des bildes falsch interpretiert??wieviele bits haben denn überhaupt die pixel die du in grau umwandeln willst??
32, 24 oder 16?? da musst du nämlich aufpassen das du die richtigen rgb-werte bekommst...ansonsten kannst du mal versuchen mit vorzeichenlosen zahlen zu rechnen,
also anstatt mit int u. char
versuchs mal mal mit unsigned int u. unsigned char...mfg
Plassy
-
Bedenke das Grün heller als Blau ist, und deswegen nicht alle Farben das gleiche Gewicht haben dürfen. Ansonsten ist der Ansatz korrekt.
Bye, TGGC
-
Folgende Formel funktioniert ganz gut:
Helligkeit = 0.3*Rot + 0.6*Grün + 0.1*BlauOder
Helligkeit = 0.3*Rot + 0.5*Grün + 0.2*Blau
-
Hi,
ich hab da mal so ein verständisproblem.
bisher hab ich immer ne lib zum konvertieren von int (RGB) zu char (graustufen) benutzt. aber wie macht man das wirklich?
meine bisherige idee war den int zu splitten in 3 bytes und dann addieren und durch drei teilen ... so also auf eine art "luminanz" zu kommen. aber irgendwie funzt das net. (oder mein algo ist falsch).Hm, könntest du das vielleicht etwas genauer bescheiben ?
Und was ist genau eine "luminanz" ?Wäre dafür sehr dankbar!.
Bye
-
Hier steht es nicht, aber bei google.
-
Gehirnmann schrieb:
bisher hab ich immer ne lib zum konvertieren von int (RGB) zu char (graustufen) benutzt. aber wie macht man das wirklich?
meine bisherige idee war den int zu splitten in 3 bytes und dann addieren und durch drei teilen ... so also auf eine art "luminanz" zu kommen. aber irgendwie funzt das net. (oder mein algo ist falsch).Es gibt nicht DIE Art, ein RGB-Bild in ein Grauwertbild zu konvertieren. Die Frage ist immer, was du im Grauwertbild berücksichtigt haben möchtest. Wenn du die Grauwerte so wählen möchtest, wie der Mensch die Farben des RGB-Bildes empfindet, dann ist die Formel von ThomasRiker anzuwenden. ...bzw. etwas genauer:
Grauwert = 0.299*rot + 0.587*grün + 0.114*blau.
Dein Ansatz hingegen extrahiert die Intensität des jeweiligen Pixels (nicht Luminanz). Das ist durchaus auch eine übliche Konvertierung. Natürlich nicht, wenn das Bild für die menschlichen Augen bestimmt ist, sondern wenn du es maschinell weiterverarbeitest.