ValueError:具有多个元素的数组的真值不明确...与None的比较

时间:2019-04-19 21:36:24

标签: python numpy opencv

我是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)

我无法理解的是,cv2.imread()返回指向对象(它是一个numpy数组)的指针,并且在未加载任何文件时,它都返回None。

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

if (img != None):
  

ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

我并不是很在意数组的元素,我只想检查数组是否存在。

2 个答案:

答案 0 :(得分:0)

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

然后说

if img:
    print(img.shape)

答案 1 :(得分:-1)

由于img是一个NumPy数组,其像素值范围为[0, 255],因此您需要检查除使用np.all()之外的其他内容,因为某些像素值将为0和{{1} }在这种情况下将返回np.all()

要解决此错误,请替换以下行:

False

包含以下行,用于检查非空性和numpy数组的形状:

if (img != None) :

或者,您可以使用:

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

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

  

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

c.f。 reading_and_writing_images