[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

    http://www.imagemagick.org/www/Magick++/Image.html



  • 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


Anmelden zum Antworten