Script de Python para generar texto punteado a partir de cualquier imagen

Requisitos previos: Python OpenCV

En este artículo, veremos cómo podemos usar Python3 para crear un texto punteado que represente una imagen. Usamos este tipo de textos en mensajes y redes sociales y generarlos es una tarea interesante de procesamiento de imágenes.

Esta tarea necesitará que definamos los bordes de la imagen dada. Después de eso, podemos usar cualquier símbolo como ‘.’, ‘o’ o ‘x’ para mostrar los píxeles brillantes y oscuros. 

  • Primero cree un nuevo script de python e instale Open CV .
python3 -m pip install opencv-python --user
  • Ahora importe cv2 y cargue la imagen que desea convertir. Aquí el nombre de la imagen es “mic.jpg” y está en el mismo directorio. Necesitamos usar la imagen en modo de escala de grises, así que proporcione un parámetro adicional para cargar en modo de escala de grises.
# import the required modules
import cv2

# Read the image
img = cv2.imread('mic.jpg',0)
  • Podemos reducir el ruido en la imagen para que las esquinas y los bordes redondeados se detecten sin problemas. Podemos usar el método medianblur() de cv2 para lograrlo.
# Apply median blur
img = cv2.medianBlur(img,5)
  • Para detectar los bordes, tenemos varios tipos de funciones de umbral disponibles en openCV. Pero el más compatible en este caso es ADAPTIVE_THRESH_MEAN_C. Además, también podemos comprobar otras funciones de umbral.
# Apply MEAN thresholding to get refined edges
image = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)

Ahora tenemos una imagen que solo tiene bordes. Podemos iterar sobre nuestra imagen para imprimir los puntos brillantes y oscuros y eso generará el texto punteado para nosotros. Si la imagen es demasiado grande, podemos usar cv2.resize() para reducir la imagen y poder usarla.

Implementación: 

Python3

# Python script to convert the given image
# into a dotted text using opencv
  
# import the required modules
import cv2
  
# Read the image
img = cv2.imread('mic.jpg', 0)
  
# Apply median blur
img = cv2.medianBlur(img, 5)
  
# Apply MEAN thresholding to get refined edges
image = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
  
# Convert the image into a compatible size
# We will use 60 pixels wide image so that text
# fits in the console
  
# Preserve the ratio
ratio = len(image)/len(image[0])
# Assign new width and calculate new height
new_width = 60
new_height = int(ratio*new_width)
# Resize the image
image = cv2.resize(image, (new_height, new_width))
  
# Iterate over the array and print the dark pixels
# or we can use any other symbol too.
for i in range(len(image)):
    for j in range(len(image[0])):
        print("o" if image[i, j] < 100 else ".", end="")
    print()
  • Imagen original : 

  • Imagen en escala de grises después de aplicar el desenfoque medio:

  • Imagen después de aplicar el umbral medio adaptativo:

  • Salida final impresa en la consola:

Publicación traducida automáticamente

Artículo escrito por mukulbindal170299 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 *