python - 使用图片时出现ValueError == None

标签 python numpy opencv

我正在为程序创建故障保护,因此无论何时没有图像或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/

相关文章:

opencv - 实时面部表情分类(情绪)

c++ - 使用opencv GPU旋转图像

python - Twisted-Deferred,如果它不是异步的,那又有什么意义呢?

python - 真相评估链法与反转法

python - 如何扩展数据框中的范围并复制值?

python - 如何用另一个 ndarray 索引一个 ndarray ?

algorithm - 找到条纹线的角度/旋转角度

python - 如何使用 URL 的一部分预填充 Django 表单?

python - 缓存非 View 返回

python - 如何告诉 Numpy 以 UTC 而不是本地时区打印时间?