当前位置: 首页 > 面试题库 >

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

丁阳羽
2023-03-14
问题内容

我正在用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则等于None(预期)。但是,当imread工作时,条件将中断:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

即,返回的numpy.ndarray值不能用作布尔值。问题似乎是imread如果成功则返回numpy.ndarray,False否则返回(布尔值)。

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

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

但是我在想:是否有更好的解决方案,更接近初始检查if(img): #do stuff


问题答案:

如果你确定的价值imgNone你的情况,你可以简单地使用if not img is None,或等效的if img is not None。您无需显式检查类型。

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

但是imread,针对OpenCV 2和3的文档指出,错误时应返回一个空矩阵。您可以使用if img.size ==0



 类似资料:
  • 问题内容: 我最近开始使用openCV和python,并决定分析一些示例代码来了解事情的完成方式。 但是,我发现的示例代码不断抛出此错误: 我正在使用的代码可以在下面找到: 我的安装有问题吗?我使用此网站作为安装python和openCV的指南。 问题答案: OpenCV 3.0带有一些名称空间更改,这可能是其中之一。另一个答案中给出的功能参考是针对OpenCV 2.4.11的,不幸的是,其中存在

  • 问题内容: 对于正在编写的程序,我正在使用base64.b64encode(f.read(image))从一台计算机上传输图像,并尝试在接收脚本中读取它而不将其保存到硬盘驱动器中(以最大程度地减少这种情况)处理时间)。我很难弄清楚如何将图像读取到OpenCV中而不将其保存在本地。 这是我发送图像的代码如下所示: 同时,这是接收它的代码。(这在on_message函数中,因为我正在使用MQTT进行传

  • 问题内容: 我正在通过jQuery $ .ajax加载图像路径,并在显示图像之前先检查它是否确实存在。我可以使用图像加载/就绪事件或类似的方法来确定文件路径有效吗? 将.myimage设置为显示:无,我希望这样做 这样有可能吗? 问题答案: 好吧,你可以绑定处理程序… 像这样, 好吧,您已经可以使用load-event 问题是如果禁用Javascript,图像将永远不会显示…

  • 我想检查Quartz作业是否正在运行。我发现它可以使用调度程序。getCurrentlyExecutingJobs()。但是我对此感到困惑,我应该把它放在哪里才能得到结果呢?谢谢

  • 问题内容: 我正在尝试使小程序以非常频繁的时间间隔(每秒几次)读取本地文件系统(用户计算机)上的文件,然后通过javascript将文件的内容提供给网页。 小程序需要读取的文件由用户计算机上的程序进行高频更新。我担心的是,如果小程序在文件正在更新的过程中从文件中读取数据,可能会发生什么。 我不知道这有多大可能,但是如果确实有问题,有没有办法在读取文件之前确保当前未将其写入文件? 问题答案: 我对此

  • 我想检查一个pdf中的图像是否在200dpi中,并且是否在java中显示颜色,目前我正在使用pdfbox从PDF中提取图像,但是如果我们可以使用java中的任何其他免费库来实现这一点也会工作。 在Pdfbox中,我能够为pdf中存在的图像获取pdxObjectImage,但很多时候,从这些pdf中提取的图像中没有元数据。 这也是计算图像dpi的一种方法。为了确定它的颜色,我可以用这个吗 或者他们有