代码之家  ›  专栏  ›  技术社区  ›  hypadr1v3

使用图像时的值错误==无

  •  0
  • hypadr1v3  · 技术社区  · 8 年前


    我正在为我的程序创建一个故障保护,因此每当映像不存在或 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'
    

    有没有一种方法可以在没有得到这些错误信息的情况下做到这一点,并且在给定图像或没有给定图像的情况下工作。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Mad Physicist    8 年前

    你是第一个 ValueError 因为 NoneType 不定义与numpy数组的相等比较,因此使用数组的比较方法。Numpy将None转换为一个对象数组,并将其广播到图像的大小。结果 ==

    你应该做的不是这些

    if src_img is None:
    

    is 比较原始引用。这是推荐的检查“无”的方法,因为它更快,而且“无”是单例的。

    AttributeError 是因为当 src_img 不是,它没有名为 all src_img.all 只是对该方法的引用,而不是调用该方法的结果。

    奇怪的是,你完全可以逃脱 if np.all(src_img == None): ,但你真的不应该这样做,因为这是一个完全的讽刺。什么时候? src_img公司 np.all 会回到现实。如果 src_img公司 np.全部 会返回False。世界上唯一一次出现错误的结果是 src_img公司 那是一个对象数组,所有元素都不是。