Estoy escribiendo un progtwig OpenCV en Python, y en algún momento tengo algo como
import cv2 import numpy as np ... img = cv2.imread("myImage.jpg") # do stuff with image here
El problema es que tengo que detectar si el archivo de imagen se está leyendo correctamente antes de continuar. cv2.imread
devuelve False
si no puedo abrir la imagen, así que pienso en hacer algo como:
if (img): #continue doing stuff
Lo que sucede es que si la imagen no se abre (por ejemplo, si el archivo no existe), img
es igual a None
(como se esperaba). Sin embargo, cuando funciona imread
, la condición, se rompe:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
es decir, el numpy.ndarray
devuelto no se puede utilizar como un valor booleano. El problema parece ser que imread
devuelve numpy.ndarray si tiene éxito y False
(booleano) de lo contrario.
Mi solución hasta ahora implica usar el type
del valor devuelto de la siguiente manera:
if (type(img) is np.ndarray): #do stuff with image
Pero me preguntaba: ¿no hay una solución mejor, más cercana a la comprobación inicial if(img): #do stuff
?
Si está seguro de que el valor de img
es None
en su caso, simplemente puede utilizarlo if not img is None
o, de manera equivalente, if img is not None
. No es necesario verificar el tipo explícitamente.
Tenga en cuenta que None
y False
no tienen el mismo valor. Sin embargo, bool(None)==False
, por lo que if None
no falla.
La documentación para imread
, tanto para OpenCV 2 como para la 3, indica, sin embargo, que una matriz vacía debe devolverse en caso de error. Puede verificar if img.size ==0
usa if img.size ==0
Si desea escribir el contenido tan pronto como se genere el archivo de imagen, puede usar os.path.isfile()
que devuelve un valor bool
dependiendo de la presencia de un archivo en el directorio dado.
import cv2 import os.path while not os.path.isfile("myImage.jpg"): #ignore if no such file is present. pass img = cv2.imread("myImage.jpg", 0) cv2.imwrite("result.jpg", img)
También puede consultar los documentos para la implementación detallada de cada método y las operaciones de imagen básicas.