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:
Logo:
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:
Publicación traducida automáticamente
Artículo escrito por richasalan57 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA