No sobreescribir texto en una imagen en Python y openCV

En este post describimos el código para no sobreescribir texto en una imagen. Usaremos el post anterior añadir texto a una imagen openCV python con modificaciones para que el texto no se sobreescriba, también registro como poner texto en un video.

Texto en imágenes sin sobreescribir

Para añadir texto en una imagen sin sobreescribir debemos usar la función copy()

El código es el siguiente:

#Importar biblioteca openCV
import cv2
#Leer imagen y redimensionar
img = cv2.imread('Quito.jpg')
img = cv2.resize(img, (720, 570))
#Características del texto
ubicacion = (20,150)
tipoLetra = cv2.FONT_HERSHEY_TRIPLEX
tamañoLetra = 5
colorLetra = (221,82,196)
grosorLetra = 2
#Escribir numeros del 1 al 20
for i in range(20):
    #Copiar imagen
    img2 = img.copy()
    #Escribir Texto
    cv2.putText(img2, str(i), ubicacion, tipoLetra, tamañoLetra, colorLetra, grosorLetra)
    #Mostrar imagen
    cv2.imshow('Imagen',img2)
    cv2.waitKey(200)

cv2.destroyAllWindows()

En el siguiente código pongo números aleatorios y muestro varios decimales.

Para reducir los decimales puedo usar cualquiera de siguientes líneas.

  • "%.2f[unidades]" % (texto) el resultado será 0.96[unidades]
  • "{:.2f}[unidades]".format(0.964545) el resultado será 0.96[unidades]
  • f'{0.964545:.2f}[unidades]' el resultado será 0.96[unidades]

El código es el siguiente

#Importar biblioteca openCV
import cv2
import numpy as np
#Leer imagen y redimensionar
img = cv2.imread('Quito.jpg')
img = cv2.resize(img, (720, 570))
#Características del texto
ubicacion = (20,150)
ubicacion2 = (20,300)
tipoLetra = cv2.FONT_HERSHEY_TRIPLEX
tamañoLetra = 1.9
colorLetra = (255,0,0)
grosorLetra = 2
#Escribir numeros del 1 al 20
for i in range(25):
    texto = np.random.rand()
    #Copiar imagen
    img2 = img.copy()
    #Escribir Texto
    cv2.putText(img2, str(texto), ubicacion, tipoLetra, tamañoLetra, colorLetra, grosorLetra)
    cv2.putText(img2, "%.2f[unidades]" % (texto), ubicacion2, tipoLetra, tamañoLetra, colorLetra, grosorLetra)
    #Mostrar imagen
    cv2.imshow('Imagen',img2)
    cv2.waitKey(200)

cv2.destroyAllWindows()
Descarga estos archivos en GitHub

Texto en un Video openCV

A diferencia de las imágenes, cuando se coloca texto en un video no es necesario usar la función copy() porque un video está compuesto por frames que se muestran uno tras otro.

Partimos del post anterior donde accedemos a la webCam y el código moificado con el texto es el siguiente.

#importar bibliotecas
import cv2
import numpy as np
#Objeto de video cature
capture = cv2.VideoCapture(0)
#Características del texto
texto = "Valores aleatrios"
ubicacion = (10,100)
ubicacion2 = (10,200)
tipoLetra = cv2.FONT_HERSHEY_TRIPLEX
tamañoLetra = 2
colorLetra = (0,255,0)
grosorLetra = 2

while (capture.isOpened()):
    #Leer cada frame
    ret, frame = capture.read()
    if (ret == True):
        #Texto números aleatorios
        numeros = np.random.rand()
        #Colocar texto
        cv2.putText(frame, texto, ubicacion, tipoLetra, tamañoLetra, colorLetra, grosorLetra)
        cv2.putText(frame, "%.5f" % (numeros), ubicacion2, tipoLetra, tamañoLetra, colorLetra, grosorLetra)
        #Mostrar frames
        cv2.imshow("Video", frame)
        #Al presionar la tecla s sale del bucle
        if (cv2.waitKey(1) == ord('s')):
            break
    else:
        break

capture.release()
cv2.destroyAllWindows()

1 comentario en “No sobreescribir texto en una imagen en Python y openCV”

Deja un comentario

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