我正在使用Python编写OpenCV程序,在某个时刻我有一个类似于以下的代码:
import cv2
import numpy as np
...
img = cv2.imread("myImage.jpg")
# do stuff with image here
问题在于我必须在继续之前检测图像文件是否被正确读取。如果无法打开图像,
cv2.imread
将返回False
,因此我考虑做这样一些事情:if (img):
#continue doing stuff
发生的情况是,如果图像未打开(例如文件不存在),img
就等于 None
(正如预期的那样)。然而,当 imread
能够工作时,条件就会被打破:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
即所返回的
numpy.ndarray
不能用作布尔值。问题似乎在于,imread
在成功时返回 numpy.ndarray,否则返回 False
(布尔值)。到目前为止,我的解决方案涉及使用返回值的
type
,如下所示:if (type(img) is np.ndarray):
#do stuff with image
但我在想:有没有更好的解决方案,更接近于最初的检查 if(img): #do stuff
?
img.size == 0
是正确的?我能找到的(和观察到的)只是在OpenCV >= 3上imread()
返回None
。 - undefined