我是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()
我并不是很在意数组的元素,我只想检查数组是否存在。
答案 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)。