Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cv2.imread:检查是否正在读取图像_Python_Opencv_Numpy - Fatal编程技术网

Python cv2.imread:检查是否正在读取图像

Python cv2.imread:检查是否正在读取图像,python,opencv,numpy,Python,Opencv,Numpy,我正在用python编写一个OpenCV程序,在某种程度上我有类似的 import cv2 import numpy as np ... img = cv2.imread("myImage.jpg") # do stuff with image here 问题是,在继续之前,我必须检测图像文件是否被正确读取cv2.imread返回False,因此我考虑执行以下操作: if (img): #continue doing stuff 如果图像未打开(例如,如果文件不存在)img等于N

我正在用python编写一个OpenCV程序,在某种程度上我有类似的

import cv2
import numpy as np
... 
img = cv2.imread("myImage.jpg")

# do stuff with image here 
问题是,在继续之前,我必须检测图像文件是否被正确读取<如果无法打开图像,则code>cv2.imread返回
False
,因此我考虑执行以下操作:

if (img):
   #continue doing stuff
如果图像未打开(例如,如果文件不存在)
img
等于
None
(如预期)。但是,当
imread
工作时,该条件会中断:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
i、 e.返回的
numpy.ndarray
不能用作布尔值。问题似乎是
imread
如果成功则返回numpy.ndarray,否则返回
False
(布尔值)

到目前为止,我的解决方案涉及使用返回值的
类型
,如下所示:

if (type(img) is np.ndarray): 
     #do stuff with image

但我想知道:难道没有更好的解决方案,更接近初始检查
if(img):#做事情

如果您确定在您的案例中
img
的值为
None
,您可以简单地使用
If not img is None
,或者,如果img not None
,则等效地使用
。您不需要显式地检查类型

请注意,
None
False
不是相同的值。但是,
bool(None)==False
,这就是如果None
失败的原因


然而,OpenCV 2和OpenCV 3的
imread
文档指出,出现错误时应返回空矩阵。如果img.size==0,则可以使用
进行检查。如果要在生成图像文件后立即写入内容,则可以使用
os.path.isfile()
,根据给定目录中是否存在文件返回
bool

import cv2 
import os.path

while not os.path.isfile("myImage.jpg"):
    #ignore if no such file is present.
    pass

img = cv2.imread("myImage.jpg", 0)

cv2.imwrite("result.jpg", img)

关于每个方法的详细实现和基本图像操作,您也可以参考。

从文档中,我们可以使用

retval  =   cv.haveImageReader (filename)

source

您知道使用imread读取不存在的图像时是否会抛出cv2.error或类似错误吗?@waspinator文档中指出,
如果图像无法读取(由于缺少文件、权限不正确、格式不受支持或无效),该函数返回一个空矩阵
这对我来说引发了这个异常,因为它将
None
与一个矩阵进行比较:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
@ZdaR的答案是检查“isfile”(“myImage.jpg”),这对我来说是一个更好的选择。