Forum: PC-Programmierung C++ Grauwert ermitteln


von Moritz (Gast)


Lesenswert?

Hallo, ich möchte mit Visual Studio 6.0 die Grauwerte eines 
Bitmap-Bildes ermitteln. Die Bitmapdatei kann ich bereits einlesen. Mit 
welcher Funktion kann man nun die Grauwerte jedes Bildpunktes ermitteln 
und in ein Array ablegen? Später möchte ich ein Histogramm darüber 
erstellen.

Im Netz hab ich mal so eine Funktion gefunden, womit der Grauwert 
ermittelt wird. Funktioniert aber nicht.
1
//Bildconvertierung
2
bildgrau=new BYTE[infoheader.biWidth*infoheader.biHeight];
3
for (i=0;i<infoheader.biWidth;i++)
4
{
5
  for (int j=0;j<infoheader.biHeight;j++)
6
  {   
7
   bildgrau[j*infoheader.biHeight+i]=(bild[j*infoheader.biHeight+i].rgbtRed+        bild[j*infoheader.biHeight+i].rgbtGreen+          bild[j*infoheader.biHeight+i].rgbtBlue)/3;
8
  }
9
}

von Karl H. (kbuchegg)


Lesenswert?

Moritz wrote:

> Im Netz hab ich mal so eine Funktion gefunden, womit der Grauwert
> ermittelt wird. Funktioniert aber nicht.

Was funktionioniert daran nicht?
Dein Code ermittelt den Grauwert als den Mittelwert der Rot Grün
Blau Werte eines Pixels.
Ist grundsätzlich zulässig.

'Den Grauwert' als solchen gibt es nicht. Du musst entscheiden
was du als Grauwert nimmst und je nachdem was du modellieren willst
ist dein Grauwert etwas anderes.

Zb. Benutzt die Umrechnung eines Farbbildes in ein Schwarz/Weiss
Bild einen gewichteten Mittelwert, der sich an der Farbempfindlichkeit
der früher üblichen Schwarz/Weiss Filme orientierte.

Du könntest aber auch den RGB in den HLS oder HSV Farbraum
transferieren und dort zb. den L ( = Lightness ) Wert als
'Grauwert' verwenden.

von Michael K. (Gast)


Lesenswert?

Y = 0.3*R + 0.59*G + 0.11*B

von johuuu (Gast)


Lesenswert?

FYI: der Wert in der Struktur BITMAPINFOHEADER,
infoheader.biHeight,
kann unter Umständen auch negativ sein (siehe z.b. Beschreibung im SDK).

von Moritz (Gast)


Lesenswert?

Also bis jetzt habe ich noch keine negativen Werte feststellen können.

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.