我正在为程序创建故障保护,因此无论何时没有图像或image = None
,它都会显示一条消息并终止程序。
我正在使用以下代码作为执行此操作的方法:
src_img = cv2.imread('/home/nazar/Downloads/img_4.png', 1)
if src_img == None:
exit('No such file or direcory!')
copy = src_img.copy()
如果没有图像,这会起作用,但是当有图像时,会出现错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我尝试遵循错误的建议并尝试了
if src_img.all == None:
,现在当没有图像时它给出了错误:AttributeError: 'NoneType' object has no attribute 'all'
有没有一种方法可以实际执行此操作而不会收到这些错误消息,并且如果给出了图像或没有给出图像,则可以正常工作。
最佳答案
您将获得第一个ValueError
,因为NoneType
没有定义与numpy数组的相等比较,因此使用了数组的比较方法。 Numpy将None转换为对象数组,并将其广播为图像的大小。 ==
的结果是按元素进行比较,即与图像大小相同的 bool(boolean) 数组。
除了这些,您应该做
if src_img is None:
is
比较原始引用。建议您检查“无”,因为它更快并且“无”是一个单例。第二个
AttributeError
来自以下事实:当src_img
为None时,它没有名为all
的方法。即使是适当的数组,src_img.all
只是对该方法的引用,而不是调用它的结果。奇怪的是,您本可以完全放弃
if np.all(src_img == None):
,但您实际上不应该这样做,因为在这种情况下,这完全是一种怪癖。当src_img
为None时,比较为标量True,因此np.all
将返回True。如果src_img
是数字数组,则每个元素将比较False,而np.all
将返回False。这个世界唯一一次给出错误结果的情况是,如果您有一个src_img
,它是一个对象数组,其所有元素均为None。
关于python - 使用图片时出现ValueError == None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51924219/