繁体   English   中英

使用图片时出现ValueError == None

[英]ValueError when using image == None


我正在为我的程序创建故障保护,因此无论何时不存在image = Noneimage = 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转换为对象数组,并将其广播为图像的大小。 ==的结果是逐元素比较,即与图像大小相同的布尔数组。

除了这些,您应该做

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM