Imágenes de marca de agua con OpenCV y Python

En este artículo, vamos a ver cómo crear imágenes con marcas de agua usando OpenCV en Python.

La marca de agua se deja texto/logotipo intencionalmente en la imagen. Los artistas suelen utilizar marcas de agua para proteger los derechos de autor de la imagen. Usando marcas de agua podemos asegurar que el propietario de la imagen es la persona que imprimió la marca de agua en la imagen. 

Entendamos esto con la ayuda de un ejemplo, qué queremos decir con una marca de agua en una imagen:

Imagen antes de la marca de agua

Logo:

logo.jpg

Implementación paso a paso:

Paso 1: importa el OpenCV y lee el logotipo y la imagen en la que deseas aplicar una marca de agua.

Python3

# watermarking image using OpenCV
  
# importing cv2
import cv2
  
# importing logo that we are going to use
logo = cv2.imread("logo.jpg")
  
# importing image on which we are going to 
# apply watermark
img = cv2.imread("dark.png")

Paso 2: Calcule la altura y el ancho de ambas imágenes y guárdelas en otras variables. Necesitamos calcular el ancho y la altura porque vamos a colocar nuestra marca de agua en algún lugar de la imagen y para eso, solo tenemos que saber el ancho y la altura adecuados tanto del logotipo como de la imagen.

Python3

# calculating dimensions
# height and width of the logo
h_logo, w_logo, _ = logo.shape
  
# height and width of the image
h_img, w_img, _ = img.shape

Aquí, hemos utilizado la función de forma de OpenCV, que devuelve la tupla de alto y ancho de la imagen.

Paso 3: Ahora, vamos a calcular las coordenadas del centro de la imagen, porque vamos a colocar nuestra marca de agua en el centro de la imagen.

Python3

# calculating coordinates of center
# calculating center, where we are going 
# to place our watermark
center_y = int(h_img/2)
center_x = int(w_img/2)
  
# calculating from top, bottom, right and left
top_y = center_y - int(h_logo/2)
bottom_y = top_y + h_logo
right_x = left_x + w_logo
left_x = center_x - int(w_logo/2)

Paso 4: Para agregar una marca de agua a una imagen, usaremos la función addWeighted de OpenCV. En primer lugar, proporcionaremos el destino donde queremos colocar la marca de agua, luego pasaremos ese destino a la función addWeighted con la imagen y el logotipo.

Sintaxis: cv2.addWeighted(fuente1, alfa, fuente2, beta, gamma)

En nuestro caso, la fuente 1 será la imagen donde queremos colocar nuestro logotipo y alfa será la opacidad del logotipo y la fuente 2 será el logotipo en sí y estableceremos beta en consecuencia, el alfa que es la opacidad y gamma será 0.

Python3

# adding watermark to the image
destination = img[top_y:bottom_y, left_x:right_x]
result = cv2.addWeighted(destination,1, logo, 0.5, 0)

 Paso 5: Después de eso, simplemente mostramos el resultado y guardamos la salida. Para mostrar la salida, hemos usado la función imshow y para escribir/guardar la imagen, estamos usando la función imwrite en ambas funciones, primero tenemos que proporcionar el nombre del archivo como parámetro y luego el archivo en sí. cv2.waitKey(0) se usa para esperar hasta que el usuario presione la tecla Esc, después de eso, la función cv2.destroyAllWindows cerrará la ventana.

Python3

# displaying and saving image
img[top_y:bottom_y, left_x:right_x] = result
cv2.imwrite("watermarked.jpg", img)
cv2.imshow("Watermarked Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

A continuación se muestra la implementación completa:

Python3

# watermarking image using OpenCV
  
# importing cv2
import cv2
  
# loading images
# importing logo that we are going to use
logo = cv2.imread("logo.jpg")
  
# importing image on which we are going to
# apply watermark
img = cv2.imread("dark.png")
  
# calculating dimensions
# height and width of the logo
h_logo, w_logo, _ = logo.shape
  
# height and width of the image
h_img, w_img, _ = img.shape
  
# calculating coordinates of center
# calculating center, where we are going to 
# place our watermark
center_y = int(h_img/2)
center_x = int(w_img/2)
  
# calculating from top, bottom, right and left
top_y = center_y - int(h_logo/2)
left_x = center_x - int(w_logo/2)
bottom_y = top_y + h_logo
right_x = left_x + w_logo
  
# adding watermark to the image
destination = img[top_y:bottom_y, left_x:right_x]
result = cv2.addWeighted(destination, 1, logo, 0.5, 0)
  
# displaying and saving image
img[top_y:bottom_y, left_x:right_x] = result
cv2.imwrite("watermarked.jpg", img)
cv2.imshow("Watermarked Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

Después de la marca de agua

Publicación traducida automáticamente

Artículo escrito por richasalan57 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *