Convierta cualquier imagen en una miniatura usando Python
Hacer un hermoso boceto requiere mucho tiempo y esfuerzo. Afortunadamente, la programación ha evolucionado para que ahora pueda convertir fácilmente imágenes y crear hermosos diseños. Un método efectivo que puede implementar es convertir una foto en un boceto digital.
Aunque un boceto mecánico puede no parecerse a su propio dibujo a lápiz, vale la pena probar el resultado. Aprenda a programar un programa de este tipo utilizando el módulo OpenCV en el lenguaje Python súper amigable.
Módulo OpenCV
OpenCV es una biblioteca de código abierto desarrollada y mantenida por Intel de métodos de visión por computadora utilizados para el procesamiento de imágenes y la visión por computadora. Esto facilita a los usuarios la creación de aplicaciones optimizadas, la interacción con imágenes y videos en tiempo real y la elección del algoritmo ideal para sus necesidades.
Algunas de las aplicaciones populares OpenCV incluye detección de rostrosseguimiento automático de rostros en cinematografía, filtros de redes sociales, reconocimiento de matrículasy vigilancia por circuito cerrado de televisión. Para usar el módulo OpenCV en Python, abra su terminal y escriba el siguiente comando:
pip install opencv-python
Cómo convertir cualquier imagen en un boceto usando Python
Para convertir su foto favorita en un boceto digital, comience colocándola en la misma carpeta que su nuevo programa de Python para una fácil referencia. Luego comience a construir su aplicación siguiendo los pasos a continuación.
Este código de muestra está disponible en un repositorio GitHub y es de uso gratuito 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 una variedad de tareas. Introduzca la ruta de su archivo de imagen Estoy leído() función de descarga. Guarde su imagen con un nombre de variable Foto 1 aquí—para futuras referencias.
Almacenar el título de la ventana en una variable con nombre nombre_ventana. Esto será útil cuando elija mostrar usando una imagen immostrar() función. Esta función requiere dos parámetros: el título y la imagen que desea mostrar.
import cv2image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)
Una vez que tenga la imagen que desea, debe realizar cinco operaciones para convertirla en un boceto. Primero, convierta la imagen en color a escala de grises. puedes hacerlo con cvtColor() función. Esta función toma una imagen cuyos colores desea cambiar y, por ejemplo, un código de conversión COLOR_BGR2GRAY.
grey_img = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
Una vez que tenga una imagen en escala de grises, invierta sus colores. En este punto, debe comprender cómo la computadora forma la imagen. Una imagen consta de muchos píxeles pequeños de diferentes intensidades. En una imagen en color, cada píxel consta de componentes rojo, verde y azul con intensidades que van de 0 a 255.
Una imagen en escala de grises contiene solo tonos de gris, por lo que la intensidad de los píxeles varía entre 0 y 1. Muestre una imagen en escala de grises para invertir la intensidad de píxeles de esta imagen. bitwise_not() función.
Como sugiere el nombre, esta función convierte el valor de cada píxel a su equivalente complementario. Todos los píxeles mayores que 0 se establecen en 0 y todos los píxeles iguales a 0 se establecen en 255.
invert = cv2.bitwise_not(grey_img)
Después de invertir la intensidad de los píxeles, puede suavizar la imagen con Gaussian Blur. El proceso de desenfoque gaussiano utiliza un filtro gaussiano. Un filtro gaussiano es un filtro de paso bajo que elimina el componente de alta frecuencia de una señal o imagen, permitiendo que solo pasen las frecuencias bajas.
OpenCV Desenfoque gaussiano() La función acepta cuatro parámetros. Estos son el objeto matriz que actúa como imagen de origen, ksize (el tamaño del núcleo) y sigmaX (la desviación estándar del núcleo gaussiano).
Digamos que tienes una foto física. Si desea hacerlo opaco, puede aplicar cera o papel pergamino sobre él. Puedes imaginar el núcleo como este pedazo de papel transparente. Digitalmente, esto sucede un poco diferente. Para desenfocar, enfocar y aplicar otros efectos a una imagen digital, debe multiplicar la matriz por la intensidad de los píxeles de la imagen.
El tamaño es siempre un número impar positivo. A medida que aumenta el tamaño del kernel, también lo hace el desenfoque. Para entender sigmaX, imagine aplicar cera a una hoja de papel. Cuando aplica cera, el papel se vuelve uniformemente transparente. Del mismo modo, debe mantener los valores del núcleo cerca de cierto punto (promedio). El valor SigmaX define la diferencia entre la media y otros valores de los píxeles de la imagen.
Pase la imagen invertida, el tamaño del núcleo (21, 21) y la desviación estándar 0 a una función de desenfoque gaussiano:
blur = cv2.GaussianBlur(invert, (21, 21), 0)
Vuelva a cambiar a bitwise_not() para convertir la imagen borrosa:
invertedblur = cv2.bitwise_not(blur)
Finalmente, úsalo dividir() función y para realizar la división de la matriz de imágenes en escala de grises de 256 escalas y la matriz de imágenes borrosas invertidas en cada elemento.
sketch = cv2.divide(grey_img, invertedblur, scale=256.0)
Básicamente, la función realiza la siguiente operación:
def divide(grey_img, b, invertedblur=256.0):
return (grey_img * scale) / invertedblur
Almacene el resultado en una variable llamada sketch. Ingrese un nombre y una imagen en miniatura para su archivo de salida para guardar la imagen final soy escritura() función. Para probar esto, puede cargar una imagen en miniatura guardada usando la función imread(), darle un título a la ventana y mostrarla usando la función imshow().
úsalo Espere() ejecute la función pasando 0 para mostrar la ventana de imagen original y la ventana de boceto creada hasta que se presione cualquier tecla.
cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
cv2.waitKey(0)
Reúna todo el código y su programa estará listo.
Salida de muestra de la conversión de imagen a boceto usando este programa de Python
Puede elegir una hermosa imagen de paisaje y ejecutarla a través de la aplicación para crear este increíble boceto digital.
En modo retrato, el programa crea el siguiente boceto digital.
Puede experimentar con la configuración de la función a su gusto para crear el boceto digital que desee.
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 lograr los resultados deseados. El procesamiento de imágenes se enfoca en mejorar una imagen, mientras que la visión artificial intenta encontrar patrones y objetos dentro de una imagen para comprenderla.
Scikit-image es otra biblioteca de Python que proporciona varias funciones de procesamiento de imágenes. Tiene varios módulos prediseñados, filtros, capas, transformaciones y más. Si está buscando un módulo para usar con modelos de aprendizaje profundo como CNN y RNN, puede consultar Torchvision.