Piszę program OpenCV w python, a w pewnym momencie mam coś podobnegocv2.imread: sprawdzenie, czy obraz jest odczytywany
import cv2
import numpy as np
...
img = cv2.imread("myImage.jpg")
# do stuff with image here
Problemem jest to, że mam do wykrycia, jeśli plik obrazu jest poprawnie czytany przed kontynuowaniem. cv2.imread
powraca False
jeśli nie jest w stanie otworzyć obraz, więc myślę, że robi coś takiego:
if (img):
#continue doing stuff
Co się dzieje, że jeśli obraz nie jest otwarta (na przykład, jeśli plik nie istnieje) img
jest równa None
(zgodnie z oczekiwaniami). Jednak, gdy imread
prace, warunek, łamie:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
czyli powrócił numpy.ndarray
nie może być stosowany jako wartość logiczną. Problem wydaje się być, że imread
zwraca numpy.ndarray, jeśli powodzenie i False
(boolean) w przeciwnym razie.
Moje rozwiązanie jakim wiąże się z wykorzystaniem type
zwróconego wartości następująco:
if (type(img) is np.ndarray):
#do stuff with image
Ale zastanawiałem się: nie ma ładniejszy rozwiązanie, bliżej do wstępnego sprawdzenia if(img): #do stuff
?
czy wiesz, że próba odczytania nieistniejącego obrazu przy użyciu imread'a rzuca cv2.error lub coś podobnego? – waspinator
@waspinator dokumentacja stwierdza, że 'Jeśli obraz nie może być odczytany (z powodu braku pliku, nieprawidłowych uprawnień, nieobsługiwanego lub nieprawidłowego formatu), funkcja zwraca pustą matrycę'' – goncalopp