OpenCV - Histogrammausgleich

Das histogrameines Bildes zeigt die Häufigkeit der Intensitätswerte der Pixel. In einem Bildhistogramm zeigt die X-Achse die Graustufenintensitäten und die Y-Achse die Häufigkeit dieser Intensitäten.

Histogram equalizationverbessert den Kontrast eines Bildes, um den Intensitätsbereich auszudehnen. Mit der Methode können Sie das Histogramm eines bestimmten Bildes angleichenequalizeHist() des ImgprocKlasse. Es folgt die Syntax dieser Methode.

equalizeHist(src, dst)

Diese Methode akzeptiert die folgenden Parameter:

  • src - Ein Objekt der Klasse Mat Darstellen des Quellbildes (Eingabebildes).

  • dst - Ein Objekt der Klasse MatDarstellung der Ausgabe. (Bild erhalten nach dem Ausgleich des Histogramms)

Beispiel

Das folgende Programm zeigt, wie das Histogramm eines bestimmten Bildes ausgeglichen wird.

import java.util.ArrayList;
import java.util.List;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class HistoTest {
   public static void main (String[] args) {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap20/histo_input.jpg";

      // Load the image
      Mat img = Imgcodecs.imread(file);

      // Creating an empty matrix
      Mat equ = new Mat();
      img.copyTo(equ);

      // Applying blur
      Imgproc.blur(equ, equ, new Size(3, 3));

      // Applying color
      Imgproc.cvtColor(equ, equ, Imgproc.COLOR_BGR2YCrCb);
      List<Mat> channels = new ArrayList<Mat>();

      // Splitting the channels
      Core.split(equ, channels);

      // Equalizing the histogram of the image
      Imgproc.equalizeHist(channels.get(0), channels.get(0));
      Core.merge(channels, equ);
      Imgproc.cvtColor(equ, equ, Imgproc.COLOR_YCrCb2BGR);

      Mat gray = new Mat();
      Imgproc.cvtColor(equ, gray, Imgproc.COLOR_BGR2GRAY);
      Mat grayOrig = new Mat();
      Imgproc.cvtColor(img, grayOrig, Imgproc.COLOR_BGR2GRAY);

      Imgcodecs.imwrite("E:/OpenCV/chap20/histo_output.jpg", equ);
      System.out.println("Image Processed");
   }
}

Angenommen, das Folgende ist das Eingabebild histo_input.jpg im obigen Programm angegeben.

Ausgabe

Beim Ausführen des Programms erhalten Sie folgende Ausgabe:

Image Processed

Wenn Sie den angegebenen Pfad öffnen, können Sie das Ausgabebild wie folgt beobachten: