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:
A continuación se describe el código:
- importar cv2 biblioteca openCV
img
imagen donde se va a escribir el textotexto
cadena de caracteres que aparecerá en la imagenubicacion
tiene dos coordenadasancho, alto
- La posición
(0 , 0)
es la superior izquierda - La posición
(2592, 1936)
es la esquina inferior derecha
- La posición
font
tipo de letra disponible ver Tab1.tamañoLetra
entero que especifica que tan grande o pequeño se mostrará el textocolorLetra
se escribe en formatoBGR
grosorLetra
se muestra el texto más voluminosobottomLeftOrigin
es opcional,bottomLeftOrigin = False
- Por defecto es
False
y la posición(0,0)
es la superior izquierda
cv2.putText
Escribe texto con todas las características enimg
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- cv2 biblioteca openCV.
img
imagen donde se va a escribir el texto.font
definir los tipos de letra- for, las características de la imagen van a depender del valor
i
en el bucle.tipoLetra
define como una matriz, los tipos de letratexto
, QuitotamañoLetra
, permanece constantecolorLetra
, color inicial(221, 256, 10)
y en cada iteración cambio enB
multiplos de 20, enG
multiplos de 15 y enR
multiplos de 50 para que se note el cambio de color.grosorLetra
, cada iteración cambia por multiplos de 3cv2.putText
Escrie el texto definido con las caracteristicas especificas enimg
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()
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.
Pingback: No sobreescribir texto en una imagen en Python y openCV - Kipuna Ec