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: