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 -