# RGB-Werte eines Bildes auslesen und als int speichern



## Mahatmas (7. Januar 2009)

Hallo zusammen,

ich habe ein jpg eingelesen und möchte nun für die RGB-Werte ein int-Wert erhalten.
Mein Problem liegt darin, dass ich nicht weiß, wie ich an die 3 RGB-Werte eines Bildes rankommen kann.

Arbeite mit Visul Studio 6 und OpenCV. Es soll eine kleine mfc werden.

Suche eine Funktion, ähnlich der "cvGetSize()", die ich bereits angewendet habe und mir die Größe des Bildes ausliest.

Hier mal bereits meine funktionierenden Funktionen:


```
void CProjektDlg::OnBtnOpen()   // Bild öffnen und Größe auslesen
{
	CFileDialog fd(TRUE);
	CvSize size;

	if( fd.DoModal() == IDOK )
	{
		m_path = fd.GetPathName();
		UpdateData(FALSE);

		image = cvLoadImage((const char*)m_path, 1);
		
		if(image)
		{
			cvNamedWindow("KAT",0);
			cvShowImage("KAT",image);
			
			size = cvGetSize( image );	// Größe des eigelesenen Bildes bestimmen
			m_width = size.width;		// Wert der Breite der Variable zuweisen
			m_height = size.height;	// Wert der Höhe der Variable zuweisen
			UpdateData(FALSE);
		}
		else MessageBox("Bild konnte nicht geladen werden!");
	}

}

void CProjektDlg::OnBtnSub() // Verdunkeln
{
	IplImage *grey = NULL;
	CvSize size;

	if(image)
	{
		grey = cvCloneImage(image);	// Bild geklont
		
		if(grey)
		{ 
			size = cvGetSize(grey);	// Größe geklonten Bildes einlesen			
			cvRectangle(grey, cvPoint(0,0), cvPoint(size.width,size.height), CV_RGB(10,10,10), -1);	// Graubild mit der Größe des Originals erzeugen
			cvmSub(image, grey, image);	// Graubild vom Original abziehen und im Original speichern
			cvShowImage("KAT", image);
			cvReleaseImage(&grey);
		}
		else MessageBox("Fehler beim clonen!");
	}
	else MessageBox("Kein Bild geladen!");

}

void CProjektDlg::OnBtnInvert()	// Negativ erzeugen
{
	IplImage *grey = NULL;
	CvSize size;

	if(image)
	{
		grey = cvCloneImage(image);

		if(grey)
		{ 
			size = cvGetSize(grey);	// Größe des geklonten Bildes einlesen
			cvRectangle(grey, cvPoint(0,0), cvPoint(size.width,size.height), CV_RGB(255,255,255), -1);
			cvmSub(grey, image, image);	// Original vom Weißbild abziehen und im Original speichern
			cvShowImage("KAT", image);
			cvReleaseImage(&grey);
		}
		else MessageBox("Fehler beim clonen!");
	}
	else MessageBox("Kein Bild geladen!");
	
}

void CProjektDlg::OnBtnRgb()    // RGB-Werte auslesen und als int-Wert ablegen
{
	IplImage *img = NULL;
	CvSize size;
	int rgb;

	if(image)
	{
		// Was muss ich hier machen?
	}
	
	else MessageBox("Kein Bild geladen!");
}
```

Vielen Dank schon mal im vorraus...

Gruß,

Flo


----------



## devDevil (7. Januar 2009)

Hmm. Man nehme eine Suchmaschine deiner Wahl, Tippe "OpenCV" ein und suche die dann auftauchende Dokumentation nach accessing image elements ab. Man erhält: http://www.cs.iit.edu/~agam/cs512/l...opencv-intro.html#SECTION00053000000000000000


----------

