Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Hacer un hermoso boceto requiere mucho tiempo y esfuerzo. Afortunadamente, la programación ha evolucionado, por lo que ahora puede transformar fácilmente las imágenes y crear hermosos diseños. Una técnica impresionante que puede llevar a cabo es convertir una imagen en un boceto digital.

Si bien un boceto mecánico no se verá exactamente como su propio dibujo a lápiz, vale la pena experimentar con el resultado. Aprenda a programar una aplicación de este tipo utilizando el módulo OpenCV en el lenguaje Python súper amigable.

El Módulo OpenCV

OpenCV es una biblioteca de código abierto desarrollada y mantenida por Intel de métodos de visión artificial utilizados para el procesamiento de imágenes y la visión artificial. Hace que sea sencillo para los usuarios crear aplicaciones optimizadas, interactuar con imágenes y videos en tiempo real y seleccionar el algoritmo ideal para sus necesidades.

instagram viewer

Algunas de las aplicaciones populares de OpenCV incluye detección de rostros, seguimiento automático de rostros en cinematografía, filtros de redes sociales, reconocimiento de matriculas de vehiculosy vigilancia por circuito cerrado de televisión. Para usar el módulo OpenCV en Python, abra su terminal y escriba el siguiente comando:

pip instalar opencv-python

Cómo convertir cualquier imagen en un boceto usando Python

Para convertir su imagen favorita en un boceto digital, comience colocándola en la misma carpeta que un nuevo programa de Python, para facilitar la referencia. Luego comience a construir su programa siguiendo los siguientes pasos.

Este código de ejemplo está disponible en un repositorio GitHub y es gratis para su uso bajo la Licencia MIT.

El primer paso es importar el módulo OpenCV a su entorno. Una vez que OpenCV está disponible, puede usar su funcionalidad para realizar varias tareas. Pase la ruta de su archivo de imagen al Estoy leído() función para cargarlo. Almacena tu imagen en una variable, llamada imagen1 aquí—para futuras referencias.

Almacene el título de la ventana en una variable llamada nombre_ventana. Esto será útil cuando elija mostrar la imagen usando el immostrar() función. Esta función requiere dos parámetros: el título y la imagen que desea mostrar.

importar cv2

imagen1 = cv2.imread('imagen.jpg')
nombre_ventana = 'Imagen real'
cv2.imshow (nombre_ventana, imagen1)

Una vez que tenga la imagen deseada, debe realizar cinco operaciones para transformarla en un boceto. Primero, convierta la imagen en color a escala de grises. Puedes hacerlo con el cvtColor() función. Esta función toma la imagen cuyos colores desea modificar y un código de conversión como COLOR_BGR2GRAY.

grey_img = cv2.cvtColor (imagen1, cv2.COLOR_BGR2GRAY)

Una vez que tenga una imagen en escala de grises, invierta sus colores. En este punto, debe comprender cómo una computadora forma una imagen. Una imagen consta de muchos píxeles diminutos con diferentes intensidades. En una imagen en color, cada píxel contiene componentes rojo, verde y azul, cada uno con una intensidad que varía de 0 a 255.

En una imagen en escala de grises, solo hay tonos de gris, por lo que la intensidad de un píxel varía entre 0 y 1. Para invertir las intensidades de píxeles de esta imagen, pase la imagen en escala de grises al bitwise_not() función.

Como sugiere el nombre, esta función invierte el valor de cada píxel a su equivalente complementario. Todos los píxeles que son mayores que 0 se establecen en 0 y todos los píxeles que son iguales a 0 se establecen en 255.

invertir = cv2.bitwise_not (grey_img)

Después de invertir las intensidades de los píxeles, puede suavizar la imagen con la ayuda de Gaussian Blur. El proceso de desenfoque gaussiano utiliza un filtro gaussiano. Un filtro gaussiano es un filtro de paso bajo que solo permite el paso de frecuencias bajas, eliminando el componente de alta frecuencia de una señal o una imagen.

OpenCV Desenfoque gaussiano() La función acepta cuatro parámetros. Estos son un objeto de matriz que actúa como la imagen de origen, el tamaño k (tamaño del núcleo) y sigmaX (la desviación estándar del núcleo gaussiano).

Suponga que tiene una fotografía física en la mano. Si quisieras difuminarlo, podrías aplicar pedazos de cera o papel pergamino sobre él. Puedes imaginar el núcleo como este trozo de papel transparente. Digitalmente, esto sucede un poco diferente. Para desenfocar, enfocar y aplicar otros efectos en una imagen digital, multiplica una matriz con la intensidad de los píxeles de la imagen.

El tamaño k es siempre un número impar positivo. A medida que aumenta el tamaño del kernel, aumenta el desenfoque. Para comprender sigmaX, suponga que está aplicando cera sobre un papel. A medida que aplica cera, el papel se vuelve uniformemente translúcido. De manera similar, debe mantener los valores del kernel cerca de un punto específico (el promedio). El valor sigmaX define la diferencia entre el promedio y otros valores de los píxeles en una imagen.

Pase la imagen invertida, el tamaño del núcleo como (21, 21) y 0 desviación estándar a la función Desenfoque gaussiano:

desenfoque = cv2.GaussianBlur (invertir, (21, 21), 0)

Pase la imagen borrosa a la función bitwise_not() nuevamente para invertirla:

desenfoque invertido = cv2.bitwise_not (desenfoque)

Finalmente, utilice el dividir() función y para realizar la división por elemento de la matriz de imágenes en escala de grises y la matriz de imágenes borrosas invertidas con una escala de 256.

boceto = cv2.divide (grey_img, desenfoque invertido, escala =256.0)

Esencialmente, la función realiza la siguiente operación:

definitivamentedividir(grey_img, b, desenfoque invertido=256.0):
devolver (grey_img * escala) / desenfoque invertido

Almacene el resultado en una variable llamada sketch. Para guardar la imagen final, pase un nombre para su archivo de salida y la imagen del boceto al soy escritura() función. Para verificarlo, puede usar la función imread() para cargar la imagen de boceto guardada, dar un título a la ventana y mostrarla usando la función imshow().

Utilizar el tecla de espera() función pasando 0 para mostrar la ventana de imagen original y la ventana de boceto generada hasta que presione cualquier tecla.

cv2.imwrite("boceto.jpeg", boceto)
imagen = cv2.imread("boceto.jpeg")
nombre_ventana ='Imagen de croquis'
cv2.imshow (nombre_ventana, imagen)
cv2.esperaClave(0)

Reúna todo el código y tendrá su programa listo.

Resultado de muestra de convertir una imagen en un boceto usando este programa de Python

Puede elegir una hermosa imagen de paisaje y ejecutarla a través del programa para generar este impresionante boceto digital.

En una imagen de retrato, el programa genera el siguiente boceto digital.

Puede experimentar con los parámetros de la función según su gusto para generar su boceto digital deseado.

Procesamiento de Imágenes y Visión por Computador

El procesamiento de imágenes y la visión artificial son dos campos tecnológicos estrechamente relacionados. Ambos involucran la alteración de imágenes digitales para obtener los resultados deseados. El procesamiento de imágenes se enfoca en mejorar una imagen, mientras que la visión por computadora busca patrones y objetos dentro de una imagen para comprenderla.

Scikit-image es otra biblioteca de Python que proporciona una amplia variedad de funciones de procesamiento de imágenes. Tiene varios módulos precompilados, filtros, capas, transformaciones y más. Si está buscando un módulo para usar con modelos de aprendizaje profundo como CNN y RNN, es posible que desee explorar Torchvision.