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