OpenCV - Ecualización de histograma
los histogramde una imagen muestra la frecuencia de los valores de intensidad de los píxeles. En un histograma de imagen, el eje X muestra las intensidades del nivel de gris y el eje Y muestra la frecuencia de estas intensidades.
Histogram equalizationmejora el contraste de una imagen, para estirar el rango de intensidad. Puede ecualizar el histograma de una imagen determinada utilizando el métodoequalizeHist() del Imgprocclase. A continuación se muestra la sintaxis de este método.
equalizeHist(src, dst)
Este método acepta los siguientes parámetros:
src - Un objeto de la clase Mat que representa la imagen de origen (entrada).
dst - Un objeto de la clase Matque representa la salida. (Imagen obtenida tras ecualizar el histograma)
Ejemplo
El siguiente programa demuestra cómo ecualizar el histograma de una imagen determinada.
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");
}
}
Suponga que la siguiente es la imagen de entrada histo_input.jpg especificado en el programa anterior.
Salida
Al ejecutar el programa, obtendrá el siguiente resultado:
Image Processed
Si abre la ruta especificada, puede observar la imagen de salida de la siguiente manera: