欢迎光临散文网 会员登陆 & 注册

OpenCV:解决NoneType错误(P1)

2022-01-26 19:49 作者:闲予1217  | 我要投稿


每周我都会收到并回复至少2-3封电子邮件和3-4篇关于OpenCV和Python中非类型错误的博客评论。

对于初学者来说,这些错误可能很难诊断——从定义上讲,它们并不是很有用。

由于这个问题经常被问到,我决定用一整篇博文来讨论这个话题。

虽然导致非类型错误的原因几乎是无限的,但根据我的经验,无论是作为一名计算机视觉开发人员,还是在PyImageSearch上与其他程序员聊天,在超过95%的情况下,OpenCV中的非类型错误都是由以下任一原因引起的:

  • 传递到CV2.imread .的映像路径无效。

  • 通过CV2.VideoCapture和相关.read方法从视频流/视频文件中读取帧时出现问题。

要了解有关OpenCV中NoneType错误的更多信息(以及如何避免这些错误),请继续阅读。

OpenCV:解决NoneType错误

在本文的第一部分中,我将详细讨论Python编程语言中的NoneType错误。

然后,我将讨论在一起使用OpenCV和Python时遇到NoneType错误的两个主要原因。

最后,我将给出一个实际的示例,它不仅会导致NoneType错误,还可以解决它。

什么是NoneType错误?

使用Python编程语言时,不可避免地会遇到如下错误:

AttributeError: 'NoneType' object has no attribute ‘something’

可以用实际属性的任何名称替换。

当我们认为正在处理特定类或对象的实例时,我们会看到这些错误,但实际上我们有Python内置类型None。

顾名思义,None表示没有值,例如当函数调用返回意外结果或完全失败时。

下面是一个从Python shell生成NoneType错误的示例:

在这里,我创建了一个名为foo的变量,并将其设置为None.

然后,我尝试将foo的bar属性设置为True,但由于foo是一个非类型对象,Python将不允许这样做——因此会出现错误消息。

95%的OpenCV NoneType错误有两个原因

案例 #1: CV2.imread

如果您收到NoneType错误,并且代码正在调用CV2.imread,那么错误的可能原因是提供给CV2.imread的文件路径无效。

如果为CV2.imread函数提供无效的文件路径(即指向不存在的文件的路径),它不会显式抛出错误消息。相反,CV2.imread只返回None。

无论何时,只要您试图访问通过CV2从磁盘加载的无映像的属性。我猜你会得到一个NoneType错误。

以下是尝试从磁盘加载不存在的映像的示例:

如你所见,CV2.imread欣然接受图像路径(即使它不存在),意识到图像路径无效,并返回None。对于习惯于抛出异常的这类函数的Python程序员来说,这尤其令人困惑。

作为额外的好处,我还将提到AssertionFailed异常。

如果试图将无效图像(即非类型图像)传递到另一个OpenCV函数中,Python+OpenCV会抱怨图像没有任何宽度、高度或深度信息——怎么可能呢,“图像”毕竟是一个无对象!

下面是一个从磁盘加载不存在的映像并立即调用OpenCV函数时可能会看到的错误消息示例:

这些类型的错误可能更难调试,因为抛出AssertionError的原因很多。但在大多数情况下,第一步应该是确保正确地从磁盘加载映像。

最后一个更罕见的CV2.imread问题是指您的映像确实存在于磁盘上,但您没有在安装了给定映像I/O库的情况下编译OpenCV。

例如,假设你有一个。磁盘上的JPEG文件,你知道你有正确的路径。

然后尝试通过CV2加载JPEG文件。我阅读并注意到一个非类型或断言错误。

这怎么可能?

文件存在!

在这种情况下,您可能忘记了在启用JPEG文件支持的情况下编译OpenCV。

在Debian/Ubuntu系统中,这是由于没有安装libjpeg造成的。

对于macOS系统,您可能忘记了通过自制安装jpeg库。

为了解决这个问题,不管操作系统是什么,都需要重新编译并重新安装OpenCV。有关如何在特定系统上编译和安装OpenCV的更多详细信息,请参阅本页。

(“参阅本页”的原网站:https://pyimagesearch.com/opencv-tutorials-resources-guides/?_ga=2.160503285.955629704.1643158794-1706104520.1639213599)

那么新文章的第一部分就写完了

本文的原文链接:https://www.pyimagesearch.com/2016/12/26/opencv-resolving-nonetype-errors/

OpenCV:解决NoneType错误(P1)的评论 (共 条)

分享到微博请遵守国家法律