En este artículo, aprenderemos cómo marcar con agua varias imágenes usando OpenCV.
Temas a cubrir:
- ¿Qué es una marca de agua?
- Cambiar el tamaño de las imágenes en OpenCV
- Crear marca de agua usando una imagen
1. ¿Qué es una marca de agua?
Una marca de agua es un logotipo, firma, texto o patrón que se superpone intencionalmente a diferentes imágenes y se utiliza para proteger los derechos de autor de las imágenes.
Su objetivo principal es promover una marca y dificultar la copia o el uso de la imagen original sin el permiso del propietario.
Las organizaciones profesionales suelen utilizar las marcas de agua para evitar que otros utilicen su contenido después de alojarlo en línea.
Entonces, ¿alguna vez has pensado en agregar una marca de agua a tus imágenes? Bueno, lo hice.
Por ejemplo, escribimos blogs y mencionamos la fuente de imágenes externas. Pero, ¿qué pasa con las imágenes que crea por su cuenta? ¿No sería bueno dejar tu huella en ellos?
¡Hurra! Comencemos con esta emocionante tarea.
2. Cambiar el tamaño de las imágenes en OpenCV
Cambiar el tamaño no es más que escalar la imagen, lo que significa cambiar el tamaño de la imagen original. Podemos aumentar o disminuir el tamaño de la imagen según los requisitos comerciales.
El cambio de tamaño se puede realizar de varias formas.
1. Conservar la relación de aspecto. La relación de aspecto de una imagen es la relación entre su ancho y su altura.
- Reducir o aumentar el tamaño de la imagen
2. No conserva la relación de aspecto
- Solo ancho de encogimiento / aumento, solo altura de encogimiento / aumento
3. Cambie tanto el ancho como el alto a valores específicos
Suena genial hasta ahora, pero ¿cómo lo hacemos en la práctica? La respuesta es OpenCV y su función resize (). Lea más sobre la función de cambio de tamaño de OpenCV en este documentación.
Sintaxis de la función cv2.resize ():
cv2.resize (src, dsize, interpolación)
- src – imagen de origen
- dsize: el tamaño deseado de la imagen de salida
- interpolación – Definición de Wikipedia: Es un método para construir (encontrar) nuevos puntos de datos basados en el rango de un conjunto discreto de puntos de datos conocidos.
Consulte esta documentación para leer más sobre banderas de interpolación.
Ahora, tomemos una imagen de muestra y cambiemos su tamaño. A continuación se muestra nuestra imagen de muestra.
Ahora, intente mostrarlo usando OpenCV.
import cv2 img = cv2.imread('images/deer.JPG') cv2.imshow("Original Image", img) cv2.waitKey(0) cv2.destroyAllWindows()
A continuación se muestra cómo se ve nuestra imagen cuando se muestra usando OpenCV. Como nuestra imagen es de alta resoluciónLa "resolución" se refiere a la capacidad de tomar decisiones firmes y cumplir con los objetivos establecidos. En contextos personales y profesionales, implica definir metas claras y desarrollar un plan de acción para alcanzarlas. La resolución es fundamental para el crecimiento personal y el éxito en diversas áreas de la vida, ya que permite superar obstáculos y mantener el enfoque en lo que realmente importa...., solo una parte de ella es visible.
Entonces, definitivamente existe la necesidad de cambiar su tamaño. Necesitamos disminuir su tamaño.
Pasos para cambiar el tamaño de una imagen en OpenCV:
- Lea la imagen usando cv2.imread ()
- Establezca el nuevo ancho y alto.
- Crea una tupla para las nuevas dimensiones
- Cambiar el tamaño de la imagen usando cv2.resize ()
- Si es necesario, guarde la imagen redimensionada en la computadora usando cv2.imwrite ()
- Muestre las imágenes originales, redimensionadas usando cv2.imshow ()
1. Conservar la relación de aspecto: reduce la escala de la imagen al 20% de su tamaño original.
(Estamos reduciendo el tamaño de la imagen original al 20% de su tamaño original. Por lo tanto, crearemos una tupla para las nuevas dimensiones calculando el 20% del ancho original, el 20% de la altura original).
import cv2 img = cv2.imread('images/deer.JPG') percent_of_scaling = 20 new_width = int(img.shape[1] * percent_of_scaling/100) new_height = int(img.shape[0] * percent_of_scaling/100) new_dim = (new_width, new_height) resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA) filename="resized_img_aspect ratio.jpg" cv2.imwrite(filename, resized_img) cv2.imshow("Original Image", img) cv2.imshow("Resized Image", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
El código anterior guarda la imagen redimensionada y muestra las imágenes redimensionadas originales.
Bien hecho. Hemos redimensionado nuestra imagen con éxito teniendo en cuenta la relación de aspecto.
2. Sin preservar la relación de aspecto: solo encoger / aumentar el ancho, solo encoger / aumentar la altura
Los pasos para cambiar el tamaño serán los mismos que los anteriores. La única diferencia es que mantenemos cualquiera de las dos dimensiones sin cambios.
import cv2 img = cv2.imread('images/deer.JPG') new_dim = (img.shape[1], 500) # changes height resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA) cv2.imshow("Original Image", img) cv2.imshow("Resized Image", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
A continuación se muestran las imágenes que se muestran del código anterior.
La imagen redimensionada está distorsionada y no es la salida deseada.
3. Cambie tanto el ancho como el alto a valores específicos
- importar cv2
- img = cv2.imread (‘imágenes / ciervo.JPG’)
- new_dim = (450, 450)
- resized_img = cv2.resize (img, new_dim, interpolation = cv2.INTER_AREA)
- cv2.imshow («Imagen original», img)
- cv2.imshow («Imagen redimensionada», resized_img)
- cv2.waitKey (0)
- cv2.destroyAllWindows ()
A continuación se muestran las imágenes que se muestran del código anterior.
Esto se ve un poco bien, pero no tan bien como la imagen de salida con una relación de aspecto conservada. Por eso prefiero cambiar el tamaño conservando la relación de aspecto.
El siguiente paso es ver cómo crear una marca de agua.
Crear marca de agua usando una imagen
Elegí poner una marca de agua con la imagen de mi nombre. Haz una imagen de tu nombre y pruébalo conmigo.
Pasos para agregar la marca de agua en el centro de una imagen:
Lea y cambie el tamaño de las imágenes (imagen de marca de agua, imagen de entrada) si es necesario.
import cv2 img = cv2.imread('images/deer.JPG') watermark = cv2.imread("watermark.PNG") percent_of_scaling = 20 new_width = int(img.shape[1] * percent_of_scaling/100) new_height = int(img.shape[0] * percent_of_scaling/100) new_dim = (new_width, new_height) resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA) wm_scale = 40 wm_width = int(watermark.shape[1] * wm_scale/100) wm_height = int(watermark.shape[0] * wm_scale/100) wm_dim = (wm_width, wm_height) resized_wm = cv2.resize(watermark, wm_dim, interpolation=cv2.INTER_AREA)
Definir el posición del logo de acuerdo con las nuevas dimensiones de la imagen de entrada redimensionada.
h_img, w_img, _ = resized_img.shape center_y = int(h_img/2) center_x = int(w_img/2) h_wm, w_wm, _ = resized_wm.shape top_y = center_y - int(h_wm/2) left_x = center_x - int(w_wm/2) bottom_y = top_y + h_wm right_x = left_x + w_wm
Consigue el Región rectangular de interés (ROI) y almacenarlo en una variableEn estadística y matemáticas, una "variable" es un símbolo que representa un valor que puede cambiar o variar. Existen diferentes tipos de variables, como las cualitativas, que describen características no numéricas, y las cuantitativas, que representan cantidades numéricas. Las variables son fundamentales en experimentos y estudios, ya que permiten analizar relaciones y patrones entre diferentes elementos, facilitando la comprensión de fenómenos complejos.... llamada ‘roi’.
roi = resized_img[top_y:bottom_y, left_x:right_x]
Superponga la marca de agua redimensionada al ROI usando cv2.addWeighted ()y almacenarlo en una variable llamada ‘resultado’.
result = cv2.addWeighted(roi, 1, resized_wm, 0.3, 0)
Ahora, agregue este resultado a la imagen de entrada redimensionada
resized_img[top_y:bottom_y, left_x:right_x] = result
Guarde la imagen resultante con marca de agua en la computadora
filename="watermarked_deer.jpg" cv2.imwrite(filename, resized_img)
Mostrar la imagen con marca de agua resultante
cv2.imshow("Resized Input Image", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
¡Tada! A continuación se muestra la imagen con marca de agua resultante.
Hasta ahora, aprendimos a poner una marca de agua en una sola imagen. Como nuestro objetivo es marcar con agua varias imágenes, necesitamos crear una lista de todas esas imágenes de entrada y recorrerlas. A continuación se muestran las imágenes que utilizaré.
Crea una lista de imágenes de entrada
import os folderPath = "images" imgList = os.listdir(folderPath) imgList
Código para marcar con agua varias imágenes
import cv2 watermark = cv2.imread("watermark.PNG") wm_scale = 40 wm_width = int(watermark.shape[1] * wm_scale/100) wm_height = int(watermark.shape[0] * wm_scale/100) wm_dim = (wm_width, wm_height) resized_wm = cv2.resize(watermark, wm_dim, interpolation=cv2.INTER_AREA) h_wm, w_wm, _ = resized_wm.shape for image in imgList: img = cv2.imread(f'{folderPath}/{image}') percent_of_scaling = 20 new_width = int(img.shape[1] * percent_of_scaling/100) new_height = int(img.shape[0] * percent_of_scaling/100) new_dim = (new_width, new_height) resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA) h_img, w_img, _ = resized_img.shape center_y = int(h_img/2) center_x = int(w_img/2) top_y = center_y - int(h_wm/2) left_x = center_x - int(w_wm/2) bottom_y = top_y + h_wm right_x = left_x + w_wm roi = resized_img[top_y:bottom_y, left_x:right_x] result = cv2.addWeighted(roi, 1, resized_wm, 0.3, 0) resized_img[top_y:bottom_y, left_x:right_x] = result filename = os.path.basename(image) cv2.imwrite("watermarked images/watermarked_"+filename, resized_img) cv2.imshow("Watermarked Image", resized_img) cv2.waitKey(0) cv2.destroyAllWindows()
Finalmente, hemos terminado con la marca de agua en todas las imágenes de entrada.
Notas finales:
Gracias por leer hasta la conclusión. Al final de este artículo, estamos familiarizados con el trabajo en algunas de las operaciones de OpenCV: leer varias imágenes, cambiar el tamaño y agregarles una marca de agua.
Espero que hayas disfrutado leyendo este artículo. Pruébelo por su cuenta y siéntase libre de compartirlo con sus compañeros de estudio.
Referencias:
Descargue el archivo de código de este Enlace de repositorio de GitHub.
Otras publicaciones de blog mías
No dude en consultar mis otras publicaciones de blog de mi perfil de DataPeaker.
Puedes encontrarme en LinkedIn, Gorjeo en caso de que desee conectarse. Me encantaría conectarme contigo.
Para un intercambio inmediato de pensamientos, escríbame a [email protected].
Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.