Un inconveniente que surgió con la captura de las imágenes desde la cámara IP es la fecha y hora de la cámara, hasta el momento no encontré manera de setear la fecha correcta, por ende en todas las imágenes la marca de agua con la fecha y hora es incorrecta.
La imagen anterior se corresponde con la marca de tiempo 2019-09-04 13:20:09, sin embargo en la marca de agua figura otra fecha del 2018.
La forma que encontré hasta el momento es correr un pequeño script en Python para corregir la fecha superponiendo un recuadro negro con la fecha correcta, la cual toma del nombre del archivo; para esto dos funciones de OpenCV.
El script es sencillo consta de tres partes:
1. Lista todos los archivos png dentro de la carpeta donde se estan guardando las imágenes.
ruta = "C:/Users/Guillermo/Desktop/img_riego"
output = "C:/Users/Guillermo/Desktop/output/"
for file in os.listdir(ruta):
if file.endswith(".png"):
print(file)
Simplemente recorremos los archivos dentro de la ruta (vble que contiene el path hasta las imágenes) y evaluamos si el archivo termina con .png o no para validar que sean imágenes.
2. Abre cada archivo, agrega el rectángulo negro y el texto. El texto además identifica que nro. de días es, no muestra la fecha. Es para poder identificar rápidamente el paso del tiempo.
img = cv2.imread(ruta+"/"+file)
cv2.rectangle(img,(850,54),(1261,84),(0,0,0),-1)
t = file.split("_")
if(nombre != str(t[0])):
nombre = str(t[0])
nroDia = nroDia + 1
hora = t[1].split(".")[0]
texto = "Dia "+str(nroDia)+" "+str(hora)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,texto,(850,82), font, 1,(255,255,255),2,cv2.LINE_AA)
Abrimos la imagen y almacenamos en img; agregamos el rectangulo cuya coordenamas previamente las sacamos por medio de algun soft de edicion de imagenes, en este caso siempre seran las mismas.
Evaluamos si en el nombre de la imagen cambio o no la fecha, en caso que haya cambiado, incrementamos el nro de dias en 1.
Por ultimo ponemos el texto en la imagen.
3. Guarda la imagen en una carpeta de salida, de manera de conservar el original:
cv2.imwrite(output+file,img)
Se puede encontrar el script completo aqui.
Basta con hacer algunos pequeños ajustes para que se pueda utilizar para cualquier tipo de foto.
El resultado es el siguiente: