[C/C++]Pixelfarbwerte aus einem Bild auslesen
-
Hi,
Ich suche eine Möglichkeit den Pixelfarbwerte von einem Bild auszulesen.Gibt es da schon irgendwelche Funktionen. Hat das vielleicht jemand schonmal gemacht ?
MFG
hager
-
In welcher Form hast du das Bild denn vorliegen. Benutzt du vielleicht QT?
Dann schau dir mal die QPixmap Klasse und QImage Klasse an.Mfg tom
-
ne noch garnichts graphisches nur console also reines c bzw. c++.
Habe mir auch schon die Bibliothek ImageMagic angeschaut sieht auch recht gut aus aber ich finde die Funktion nicht dafür hab bis jetzt nur die benutzen Farbanzahl vom ganzen Bild herausbekommen.
Aber nicht die Farbwerte der einzelnen Pixel.
-
Axo das Format ist erstmal nicht so wichtig wär mir egal wenn es nur mit jpg oder tiff etc. geht.
-
spätenstens mit Qt4 kannst du auch Consolen-Anwendungen schreiben und dann auch für solche Dinge Qt benutzen
-
nunja jetzt will ich aber nicht bis qt4 warten.
Aber ImageMagick scheint schon gut zu sein nur blick durch die Funtkionen nicht richtig durch.
Wie soll ich die Funktionen richtig benutzen http://www.imagemagick.org/www/api/color.html ? Bzw, welche Funktion gibt mir den den Farbwert des Bildes aus ?MFG
hager
-
das ist doch nicht wirklich schwer rauszufinden
Magick::Image::pixelColor
-
ah das war die gesuchte Funktion.
hab die ganze Zeit versucht mittels GetColorInfoList und dem Zeug den Pixel auszulesen.
Naja jetzt funktioniert es mit c++
Aber gibt es auch die Funktion unter C ?
Wenn nicht dann muss ich wohl auf C++ umsteigen.BIG THX
hager
-
argh zu früh gefreut.
War anscheinend nur Zufall. Nach langen herumprobieren bin ich wieder am Anfang des Problems hier mal mein Test Quellcode:#include <Magick++.h> #include <iostream> using namespace std; using namespace Magick; int main(int argc,char **argv) { Image image; int rows; int columns; unsigned int x=0; unsigned int y=0; try { image.read("test.jpg"); // read the image rows = image.rows(); // calculate the images rows columns = image.rows(); // calculate the image columns for (x=0; x<columns; x++) { if (image.pixelColor(x,0) == ColorMono(true)) printf("0"); else printf("1"); } image.write( "out.jpg" ); } catch( Exception &error_ ) { cout << "Caught exception: " << error_.what() << endl; return 1; } return 0; }
Leider kommen da undefinierbare Zustände raus.
Das Test Bild besteht aus eine schwarzen hälfte und einer weissen hälfte was 10x10 Pixel gross ist.
Vielleicht kann jemand sich das mal anschauen.MFG
hager
-
hab das ganze noch ein bissel umgeschrieben ist zwar etwas unschön aber es tut da ich nur unterscheiden will ob ein pixel schwarz bzw. weiss ist.
da bei anderen farbwerten z.B. rot total komische werte kommen. -254231564 usw.
Naja etwas komisch: hier der neue code:#include <Magick++.h> #include <iostream> using namespace std; using namespace Magick; int main(int argc,char **argv) { Image image; int rows; int columns; unsigned int x=0; unsigned int y=0; ColorRGB pixel; double r, g, b; try { image.read("test.jpg"); // read the image //image.crop( Geometry(100,100, 100, 100) ); rows = image.rows(); // calculate the images rows columns = image.rows(); // calculate the image columns for (x=0; x<columns; x++) { pixel = image.pixelColor(x,0); r = pixel.red(); g = pixel.green(); b = pixel.blue(); printf ("r:%d g:%d b:%d", r, g, b); } image.write( "x.gif" ); } catch( Exception &error_ ) { cout << "Caught exception: " << error_.what() << endl; return 1; } return 0; }
MFG
hager