我正在用 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.ndarrayFalse
(布尔值)否则。
到目前为止我的解决方案涉及使用type
返回值如下:
if (type(img) is np.ndarray):
#do stuff with image
但我想知道:是否有更好的解决方案,更接近初始检查if(img): #do stuff
?
如果您确定的值img
is None
在你的情况下,你可以简单地使用if not img is None
,或者等价地,if img is not None
。您不需要显式检查类型。
注意None
and False
are not相同的值。然而,bool(None)==False
, 这就是为什么if None
fails.
的文档imread
然而,对于 OpenCV 2 和 3,都指出错误时应返回空矩阵。您可以使用检查if img.size ==0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)