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: