Añadir texto a una imagen con Python – OpenCV

Añadir texto a una imagen putText

En este post añadiremos texto a una imagen con python y openCV. Comprender esto es importante para que en futuras aplicaciones puedas mostrar resultados, valores, coordenadas, detecciones, nombres sobre una imagen o un video. Usaremos la función putText de openCV que agrega texto en una posición, tipo, tamaño, color y grosor específicos. Los parámetros de esta función son los siguientes:

cv2.putText(img, texto, ubicacion, font, tamañoLetra, colorLetra, grosorLetra, bottomLeftOrigin = False)

Antes de escribir sobre una imagen hay que considerar las dimensiones de la misma, para que la posición del texto no este fuera de los límites. Usaremos la siguiente imagen:

Imagen Quito.jpg

A continuación se describe el código:

  1. importar cv2 biblioteca openCV
  2. img imagen donde se va a escribir el texto
  3. texto cadena de caracteres que aparecerá en la imagen
  4. ubicacion tiene dos coordenadas ancho, alto
    • La posición (0 , 0)es la superior izquierda
    • La posición (2592, 1936) es la esquina inferior derecha
  5. font tipo de letra disponible ver Tab1.
  6. tamañoLetra entero que especifica que tan grande o pequeño se mostrará el texto
  7. colorLetra se escribe en formato BGR
  8. grosorLetra se muestra el texto más voluminoso
  9. bottomLeftOrigin es opcional,
    • bottomLeftOrigin = False
    • Por defecto es Falsey la posición (0,0) es la superior izquierda
  10. cv2.putText Escribe texto con todas las características en img

El código completo es el siguiente:

#Importar librería cv2
import cv2

#Leer imagen
img = cv2.imread('Quito.jpg')

#Características del texto
texto = "Quito"
ubicacion = (200,700)
font = cv2.FONT_HERSHEY_TRIPLEX
tamañoLetra = 25
colorLetra = (221,82,196)
grosorLetra = 10

#Escribir texto
cv2.putText(img, texto, ubicacion, font, tamañoLetra, colorLetra, grosorLetra)

#Guardar imagen
cv2.imwrite('textoQuito.jpg', img)

#Mostrar imagen
cv2.imshow('imagen',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Obtendremos un resultado así:

Hay algunos tipos de letra, en este ejemplo usamos FONT_HERSHEY_TRIPLEX, pero a continuación veremos como son los demás tipos de letra disponible en openCV.

Tipos de letra

cv2.FONT_HERSHEY_SIMPLEX = 0
cv2.FONT_HERSHEY_PLAIN = 1
cv2.FONT_HERSHEY_DUPLEX = 2
cv2.FONT_HERSHEY_COMPLEX = 3
cv2.FONT_HERSHEY_TRIPLEX = 4
cv2.FONT_HERSHEY_COMPLEX_SMALL = 5
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX = 6
cv2.FONT_HERSHEY_SCRIPT_COMPLEX = 7
cv2.FONT_ITALIC = 16

Tipos de letra en una misma imagen

El siguiente código realiza modificaciones al ejemplo anterior para que se muestre en una misma imagen, varios tipos de letra, cambio de color y grosor.

Desplegar la explicación del código

  1. cv2 biblioteca openCV.
  2. img imagen donde se va a escribir el texto.
  3. font definir los tipos de letra
  4. for, las características de la imagen van a depender del valor ien el bucle.
    • tipoLetra define como una matriz, los tipos de letra
    • texto, Quito
    • tamañoLetra, permanece constante
    • colorLetra, color inicial (221, 256, 10) y en cada iteración cambio en B multiplos de 20, en G multiplos de 15 y en R multiplos de 50 para que se note el cambio de color. grosorLetra, cada iteración cambia por multiplos de 3
    • cv2.putText Escrie el texto definido con las caracteristicas especificas en img
import cv2

#Leer imagen
img = cv2.imread('Quito.jpg')

#Tipos de letra - Fuentes de texto
font0 = cv2.FONT_HERSHEY_SIMPLEX
font1 = cv2.FONT_HERSHEY_PLAIN
font2 = cv2.FONT_HERSHEY_DUPLEX
font3 = cv2.FONT_HERSHEY_COMPLEX
font4 = cv2.FONT_HERSHEY_TRIPLEX
font5 = cv2.FONT_HERSHEY_COMPLEX_SMALL
font6 = cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
font7 = cv2.FONT_HERSHEY_SCRIPT_COMPLEX
font8 = cv2.FONT_ITALIC

tipoLetra = [font0,font1,font2,font3,font4,font5,font6,font7,font8]
texto = "Quito"
tamañoLetra = 3
grosorLetra = 2

#Bucle for, escribir 9 veces Quito
for i in range(9):   
    #Color de letra BGR, cambia conforme cambia i
    colorLetra = (221-20*i, 256-15*i, 10+50*i)
        
    #La ubicación mantiene en 50 el eje X (ancho)
    # y cambia en multiplos de 70 el eje Y (alto)
    ubicacion = (50,80+70*i)

    #Escribe el texto en la imagen
    cv2.putText(img, texto, ubicacion, tipoLetra[i], tamañoLetra, colorLetra, grosorLetra, cv2.LINE_AA)

#Guardar imagen
cv2.imwrite('Quito0.jpg', img)

#Mostrar imagen
cv2.imshow('Quito',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Descarga estos archivos en GitHub

Obtendremos un resultado así:

Si lo que deseas es escribir texto en un video, o escribir valores que cambian y que el texto no se sobreescriba, te recomiendo el siguiente post No sobreescribir texto. Y su contenido en Youtube se muestra a continuación.

1 comentario en “Añadir texto a una imagen con Python – OpenCV”

  1. Pingback: No sobreescribir texto en una imagen en Python y openCV - Kipuna Ec

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *