Java DIP - Application d'un filigrane

Dans ce chapitre, nous apprenons deux façons d'appliquer un filigrane sur des images. Ces moyens sont -

  • Application d'un filigrane de texte
  • Application d'un filigrane d'image

Application d'un filigrane de texte

Nous utilisons OpenCV fonction putTextpour appliquer un filigrane de texte à l'image. Il peut être trouvé sousCorepaquet. Sa syntaxe est donnée ci-dessous -

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

Les paramètres de cette fonction sont décrits ci-dessous -

N ° Sr. Paramètre et description
1

Source

C'est l'image source.

2

Text

C'est le texte de chaîne qui apparaîtrait sur l'image.

3

Point

C'est le point où le texte doit apparaître sur l'image.

4

fontFace

Type de police. Par exemple - FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX etc.

5

fontScale

C'est le facteur d'échelle de la police qui est multiplié par la taille de base spécifique à la police.

6

color

C'est la couleur du texte.

En dehors de la méthode putText, il existe d'autres méthodes fournies par la classe Core. Ils sont décrits brièvement -

N ° Sr. Méthode et description
1

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

Il normalise la norme ou la plage de valeurs d'un tableau.

2

perspectiveTransform(Mat src, Mat dst, Mat m)

Il effectue la transformation matricielle de perspective des vecteurs.

3

phase(Mat x, Mat y, Mat angle)

Il calcule l'angle de rotation des vecteurs 2D.

4

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

Il dessine un rectangle haut-droit simple, épais ou rempli.

5

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

Il réduit une matrice à un vecteur.

6

transform(Mat src, Mat dst, Mat m)

Il effectue la transformation matricielle de chaque élément du tableau.

Exemple

L'exemple suivant illustre l'utilisation de la classe Core pour appliquer un filigrane de texte à une image -

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

Production

Lorsque vous exécutez le code donné, la sortie suivante est vue -

Image originale

Image en filigrane de texte

Application d'un filigrane d'image sur l'image

Nous allons utiliser OpenCV fonction addWeightedpour appliquer un filigrane d'image à l'image. Il peut être trouvé sousCorepaquet. Sa syntaxe est donnée ci-dessous -

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

Les paramètres de cette fonction sont décrits ci-dessous -

N ° Sr. Paramètre et description
1

src1

C'est le premier tableau d'entrée.

2

alpha

C'est le poids des premiers éléments du tableau.

3

src2

C'est le deuxième tableau d'entrée de la même taille et du même numéro de canal que src1.

4

beta

C'est le poids des deuxièmes éléments du tableau.

5

gamma

C'est le scalaire ajouté à chaque somme.

6

dst

C'est le tableau de sortie qui a la même taille et le même nombre de canaux que les tableaux d'entrée.

Exemple

L'exemple suivant montre l'utilisation de la classe Core pour appliquer un filigrane d'image à une image -

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

Production

Lorsque vous exécutez le code donné, la sortie suivante est vue -

Image originale

L'image du filigrane

Image en filigrane