Java DIP: aplicación de marca de agua

En este capítulo aprendemos dos formas de aplicar marcas de agua en imágenes. Estas formas son:

  • Aplicar marca de agua de texto
  • Aplicar marca de agua de imagen

Aplicar marca de agua de texto

Usamos OpenCV función putTextpara aplicar una marca de agua de texto a la imagen. Se puede encontrar enCorepaquete. Su sintaxis se da a continuación:

Core.putText(source, Text, Point, fontFace ,fontScale , color);

Los parámetros de esta función se describen a continuación:

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

Source

Es la imagen de origen.

2

Text

Es la cadena de texto que aparecería en la imagen.

3

Point

Es el punto donde debe aparecer el texto en la imagen.

4

fontFace

Tipo de fuente. Por ejemplo, FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX, etc.

5

fontScale

Es el factor de escala de la fuente que se multiplica por el tamaño base específico de la fuente.

6

color

Es el color del texto.

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

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

normalize(Mat src, Mat dst, double alpha, double beta, int norm_type)

Normaliza la norma o rango de valores de una matriz.

2

perspectiveTransform(Mat src, Mat dst, Mat m)

Realiza la transformación matricial de perspectiva de vectores.

3

phase(Mat x, Mat y, Mat angle)

Calcula el ángulo de rotación de los vectores 2D.

4

rectangle(Mat img, Point pt1, Point pt2, Scalar color)

Dibuja un rectángulo arriba a la derecha simple, grueso o relleno.

5

reduce(Mat src, Mat dst, int dim, int rtype, int dtype)

Reduce una matriz a un vector.

6

transform(Mat src, Mat dst, Mat m)

Realiza la transformación matricial de cada elemento de la matriz.

Ejemplo

El siguiente ejemplo demuestra el uso de la clase Core para aplicar una marca de agua de texto a una imagen:

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

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Main {
   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());  
         
         Core.putText(source, "Tutorialspoint.com", new Point  (source.rows()/2,source.cols()/2), Core.FONT_ITALIC,new Double(1),new  Scalar(255));

         Highgui.imwrite("watermarked.jpg", source);
         
      } catch (Exception e) {
         System.out.println("Error: "+e.getMessage());
      }
   }
}

Salida

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

Imagen original

Imagen con marca de agua de texto

Aplicar marca de agua de imagen en la imagen

Vamos a usar OpenCV función addWeightedpara aplicar una marca de agua de imagen a la imagen. Se puede encontrar enCorepaquete. Su sintaxis se da a continuación:

Core.addWeighted(InputArray src1, alpha, src2 (Watermark image), beta, gamma, OutputArray dst);

Los parámetros de esta función se describen a continuación:

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

src1

Es la primera matriz de entrada.

2

alpha

Es el peso de los primeros elementos de la matriz.

3

src2

Es la segunda matriz de entrada del mismo tamaño y número de canal que src1.

4

beta

Es el peso de los segundos elementos de la matriz.

5

gamma

Es el escalar agregado a cada suma.

6

dst

Es la matriz de salida que tiene el mismo tamaño y número de canales que las matrices de entrada.

Ejemplo

El siguiente ejemplo demuestra el uso de la clase Core para aplicar una marca de agua de imagen a una imagen:

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

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Main {
   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 waterMark = Highgui.imread("watermark.png",  Highgui.CV_LOAD_IMAGE_COLOR);
         Rect ROI = new Rect(waterMark.rows() * 4,waterMark.cols(),  waterMark.cols(),waterMark.rows());
         
         Core.addWeighted(source.submat(ROI), 0.8, waterMark, 0.2, 1,  source.submat(ROI));
         Highgui.imwrite("watermarkedImage.jpg", source);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Salida

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

Imagen original

La imagen de marca de agua

Imagen con marca de agua