Sto scrivendo un programma di OpenCV in python, e ad un certo punto ho qualcosa di similecv2.imread: verifica se l'immagine è in corso la lettura
import cv2
import numpy as np
...
img = cv2.imread("myImage.jpg")
# do stuff with image here
Il problema è che ho per rilevare se il file di immagine viene letto correttamente prima di continuare. cv2.imread
restituisce False
se non in grado di aprire l'immagine, quindi penso di fare qualcosa di simile:
if (img):
#continue doing stuff
Quello che succede è che se l'immagine non viene aperta (ad esempio se il file non esiste) img
è pari a None
(come previsto). Tuttavia, quando imread
opere, la condizione, si rompe:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
vale a dire la tornata numpy.ndarray
non può essere utilizzato come un valore booleano. Il problema sembra essere che imread
restituisca numpy.ndarray se ha successo e False
(booleano) altrimenti.
La mia soluzione prevede finora utilizzando la type
del valore restituito come segue:
if (type(img) is np.ndarray):
#do stuff with image
ma mi chiedevo: non c'è una soluzione più bello, più vicino al controllo iniziale if(img): #do stuff
?
sai se provare a leggere un'immagine inesistente usando imread genera un cv2.error o qualcosa di simile? – waspinator
@waspinator la documentazione afferma che 'Se l'immagine non può essere letta (a causa di file mancanti, permessi impropri, formato non supportato o non valido), la funzione restituisce una matrice vuota' – goncalopp