Java DIP: mejora del brillo de la imagen

En este capítulo mejoramos el brillo de una imagen multiplicando cada píxel de la imagen con un valor alfa y agregando otro valor beta.

Nosotros OpenCV función convertToque hace la operación anterior automáticamente. Se puede encontrar enMatpaquete. Su sintaxis se da a continuación:

int alpha = 2;
int beta = 50;
sourceImage.convertTo(destination, rtype , alpha, beta);

Los parámetros se describen a continuación:

No Señor. Descripción de parámetros
1

destination

Es imagen de destino.

2

rtype

Es el tipo de matriz de salida deseada o, mejor dicho, la profundidad, ya que el número de canales es el mismo que tiene la entrada. si rtype es negativo, la matriz de salida tendrá el mismo tipo que la entrada.

3

alpha

Es un factor de escala opcional.

4

beta

Es un delta opcional agregado a los valores escalados.

Aparte del método convertTo, hay otros métodos proporcionados por la clase Mat. Se describen brevemente:

No Señor. Método y descripción
1

adjustROI(int dtop, int dbottom, int dleft, int dright)

Ajusta el tamaño y la posición de una submatriz dentro de la matriz principal.

2

copyTo(Mat m)

Copia la matriz a otra.

3

diag()

Extrae una diagonal de una matriz o crea una matriz diagonal.

4

dot(Mat m)

Calcula un producto escalar de dos vectores.

5

reshape(int cn)

Cambia la forma y / o el número de canales de una matriz 2D sin copiar los datos.

6

submat(Range rowRange, Range colRange)

Extrae una submatriz rectangular.

Ejemplo

El siguiente ejemplo demuestra el uso de la clase Mat para mejorar el brillo de una imagen:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;

public class Main {
   static int width;
   static int height;
   static double alpha = 2;
   static double beta = 50;
   
   public static void main( String[] args ) {
   
      try{
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source =  Highgui.imread("digital_image_processing.jpg",Highgui.CV_LOAD_IMAGE_COLOR);
         Mat destination = new Mat(source.rows(),source.cols(),
         
         source.type());
         source.convertTo(destination, -1, alpha, beta);
         Highgui.imwrite("brightWithAlpha2Beta50.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error:" + e.getMessage());
      }
   }
}

Salida

Cuando ejecuta el código dado, se ve el siguiente resultado:

Imagen original

Imagen brillante mejorada (Alfa = 1 y Beta = 50)

Imagen brillante mejorada (Alpha = 2 y Beta = 50)