Seite 1 von 1

Kontrast erhöhen

Verfasst: 6. Mai 2010 09:49
von abcmann74
Hi

Ich will ein mittels eines Schiebereglers den Kontrast ein Bildes erhöhen bzw. verkleinern.
Ich habe mir gedacht, dass ich aus dem bild jeden Pixel auslese und dann die helligkeit bzw. den kontrast manipuliere.

Ich habe dazu folgenen Code als Beispiel an einem Bild und einem 10x10 Pixel Ausschnitt geschrieben.

Code: Alles auswählen

void MainWindow::Load(void)
{
  Image_.~QImage();

  FilePath_ = QFileDialog::getOpenFileName(
    0,
    "Durchsuchen",
    "D:/esch/C++/Kantendetektion",
    "Images (*.*)",
    0,
    0);

  Image_ = QImage(FilePath_);

  if(Image_.isNull())
  { 
    return;
  }
  
  for (int y=0;y<10;y++)
  {
    for(int x=0;x<10;x++)
    {
      QRgb q = Image_.pixel(x,y);

      QColor qc ( q );
      qc.lighter(120);
        
      QRgb qnew = qRgb( qc.red(), qc.green(), qc.blue());

      Image_.setPixel( x, y, qnew  );
    } 
  }

  Scene_= new QGraphicsScene;

  Scene_->addPixmap(QPixmap::fromImage(Image_));

  View_= new QGraphicsView;
  View_->setScene(Scene_);

  View_->scale(0.4, 0.4);
  
  View_->show();
}
Das Problem ist, dass nicht passiert. Das heißt ich müsste ja eigentlich ein 10x10 großen Ausschnitt im bild heller gemacht haben. Ich kann aber leider nix auf dem ausgegebenen Bild Image_ erkennen.
Kann mir da vllt. jemand weiterhelfen?

Verfasst: 6. Mai 2010 12:23
von upsala
Was issn das: Image_.~QImage(); ?

Außerdem skalierst du dein Bild auf 4x4 Pixel runter.

Verfasst: 6. Mai 2010 12:29
von abcmann74
hi upsala

mit dem destruktor zerstöre ich das alte bild weil ich nicht will das man mehrere Bilder laden kann.

am ende skaliere ich das bild um 40 % prozent runter, da es sonst zu groß für den bildschirm ist.

Verfasst: 6. Mai 2010 13:14
von franzf
abcmann74 hat geschrieben:mit dem destruktor zerstöre ich das alte bild weil ich nicht will das man mehrere Bilder laden kann.
Nie, wirklich nie(!) den Destruktor manuell aufrufen, außer du weißt GENAU was du da machst, und dass du es brauchst. Du produzierst da (vor allem wie du weiter machst) undefiniertes Verhalten!
Das was du damit bezwecken willst, macht ein paar Zeilen später doch dein Image_ = QImage(FilePath_);.
Besser wäre aber hier ein Image_.load(FilePath_); zu verwenden.

Verfasst: 6. Mai 2010 15:14
von abcmann74
ok danke für den tip. habe es direkt mal geändert.
hat jemand noch ne idee wie ich den kontrast des bildes anders ändern kann?

Verfasst: 6. Mai 2010 18:26
von upsala
Du verwirfst den Rückgabewert von lighter()

Verfasst: 7. Mai 2010 08:08
von abcmann74
danke upsala. jetzt funktioniert es.