ValueError:包含多个元素的数组的真值不明确。。。与无相比 我是Python初学者,有C++和Pascal的背景。我想做的是用cv2库加载图像,并检查它是否正确加载: filePathIn = 'E:\\test.jpg' img = cv2.imread(filePathIn, cv2.IMREAD_COLOR ) if (img != None) : print (img.shape) else: print ("Can't find file: "+filePathIn)

ValueError:包含多个元素的数组的真值不明确。。。与无相比 我是Python初学者,有C++和Pascal的背景。我想做的是用cv2库加载图像,并检查它是否正确加载: filePathIn = 'E:\\test.jpg' img = cv2.imread(filePathIn, cv2.IMREAD_COLOR ) if (img != None) : print (img.shape) else: print ("Can't find file: "+filePathIn),python,numpy,opencv,Python,Numpy,Opencv,我所理解的是,cv2.imread()返回指向对象的指针(这是一个numpy数组),当没有加载任何文件时,它将不返回任何文件 因此,当找不到该文件时,它会正常工作并执行“else”语句。但是,如果文件实际已加载,则会出现以下错误,我不理解: if (img != None): ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all() 我并不真正关心数组的元素,我只想检查数组是否存在 “我只想检查数组是否存在” 那就说 如果img: 打印(图像形状) 由于img是

我所理解的是,
cv2.imread()
返回指向对象的指针(这是一个numpy数组),当没有加载任何文件时,它将不返回任何文件

因此,当找不到该文件时,它会正常工作并执行“else”语句。但是,如果文件实际已加载,则会出现以下错误,我不理解:

if (img != None):
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

我并不真正关心数组的元素,我只想检查数组是否存在

“我只想检查数组是否存在”

那就说

如果img:
打印(图像形状)

由于
img
是一个像素值范围为
[0255]
的NumPy数组,因此您必须检查使用
np.all()
以外的其他内容,因为在这种情况下,一些像素值将为0而
np.all()
将返回
False

要修复此错误,请替换以下行:

if (img != None) :
使用以下行检查numpy数组的非空性和形状:

if img is not None and len(img.shape) > 0 :

或者,您可以使用:

if np.all(img) is not None:
   # do more here
注意:我们检查
cv2.imread()
返回的对象的
type()
的原因是:

函数imread从指定文件加载图像并返回。如果无法读取图像(由于缺少文件、权限不正确、格式不受支持或无效),函数将返回一个空矩阵(Mat::data==NULL)


c、 f.

如果img不是无:
将是正确的测试。它正确地处理
None
值(对None的相等性测试很棘手),并且不会在数组中给出此错误。Thx,它可以工作。然而,你能详细解释一下为什么平等测试没有是棘手的吗?尤其是当img实际上是None(代码中的else语句)时,python接受了该语句。哦,我现在想的是:'is'是身份比较,检查两个参数是相同的实例相同的地址相同的指针。因此,当它被使用时,它会检查:img和None是否都是相同的指针。然而,当我的图像没有被加载时,'=='操作符只是比较值,比较了None==None,就可以了;然而,当我的对象在内存中的实际地址大于comparison img==None时,Python会感到困惑:我应该将对象img的哪个值与None进行比较?我说得对吗?不是用
None
进行的平等性测试很棘手;这是对数组的平等性测试。
(id(img)!=id(None)):
也有效:)“if-img:”返回相同的错误:
if-img:ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
如果img为None:,我会尝试@hpaulj的建议,如果img为None:,如果这不起作用,你可能会想查看cv2.imread()上的文档,看看它在这种情况下会返回什么。如果img没有加载,第一个解决方案就不起作用,因为你要检查不存在的对象` print(len(img.shape)的形状>0)AttributeError:“非类型”对象没有属性“形状”`@JanK谢谢你指出,我已经更新了答案。请看一看!