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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #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ódigo1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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