Java DIP - Aplicando marca d'água

Neste capítulo, aprendemos duas maneiras de aplicar marcas d'água em imagens. Essas formas são -

  • Aplicação de marca d'água de texto
  • Aplicando marca d'água de imagem

Aplicação de marca d'água de texto

Nós usamos OpenCV função putTextpara aplicar a marca d'água de texto à imagem. Pode ser encontrado emCorepacote. Sua sintaxe é fornecida abaixo -

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

Os parâmetros desta função são descritos abaixo -

Sr. Não. Parâmetro e Descrição
1

Source

É a imagem de origem.

2

Text

É o texto da string que apareceria na imagem.

3

Point

É o ponto onde o texto deve aparecer na imagem.

4

fontFace

Tipo de fonte. Por exemplo - FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX etc.

5

fontScale

É o fator de escala da fonte que é multiplicado pelo tamanho de base específico da fonte.

6

color

É a cor do texto.

Além do método putText, existem outros métodos fornecidos pela classe Core. Eles são descritos resumidamente -

Sr. Não. Método e Descrição
1

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

Ele normaliza a norma ou intervalo de valores de uma matriz.

2

perspectiveTransform(Mat src, Mat dst, Mat m)

Realiza a transformação da matriz de perspectiva de vetores.

3

phase(Mat x, Mat y, Mat angle)

Ele calcula o ângulo de rotação de vetores 2D.

4

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

Ele desenha um retângulo simples, espesso ou preenchido à direita.

5

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

Ele reduz uma matriz a um vetor.

6

transform(Mat src, Mat dst, Mat m)

Ele realiza a transformação da matriz de cada elemento do array.

Exemplo

O exemplo a seguir demonstra o uso da classe Core para aplicar marca d'água de texto a uma imagem -

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());
      }
   }
}

Resultado

Quando você executa o código fornecido, a seguinte saída é vista -

Imagem original

Imagem com marca d'água de texto

Aplicação de marca d'água de imagem na imagem

Vamos usar OpenCV função addWeightedpara aplicar a marca d'água da imagem à imagem. Pode ser encontrado emCorepacote. Sua sintaxe é fornecida abaixo -

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

Os parâmetros desta função são descritos abaixo -

Sr. Não. Parâmetro e Descrição
1

src1

É a primeira matriz de entrada.

2

alpha

É o peso dos primeiros elementos do array.

3

src2

É a segunda matriz de entrada do mesmo tamanho e número de canal que src1.

4

beta

É o peso dos segundos elementos da matriz.

5

gamma

É o escalar adicionado a cada soma.

6

dst

É a matriz de saída que possui o mesmo tamanho e número de canais que as matrizes de entrada.

Exemplo

O exemplo a seguir demonstra o uso da classe Core para aplicar marca d'água de imagem a uma imagem -

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());
      }
   }
}

Resultado

Quando você executa o código fornecido, a seguinte saída é vista -

Imagem original

A imagem da marca d'água

Imagem com marca d'água