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

OpenCV:解决NoneType错误(P2)

2022-01-27 11:26 作者:闲予1217  | 我要投稿

书接上文(doge)

案例 #2: CV2.VideoCapture 和 .read

就像我们在使用CV2.imread时看到的NoneType错误和AssertionError异常一样,在处理视频流/视频文件时,您也会看到这些错误。

为了访问视频流,OpenCV使用CV2.VideoCapture,它接受一个参数,可以是:

  1. 表示磁盘上视频文件路径的字符串。

  2. 表示计算机上网络摄像头索引的整数。

使用OpenCV处理视频流和视频文件比简单地通过CV2加载图像要复杂得多。我读过,但同样的规则适用。

如果你试着运行.read实例化CV2的方法。VideoCapture(无论是视频文件还是网络摄像头流)并注意到NoneType错误或断言错误,则您可能会遇到以下任一问题:

  1. 输入视频文件的路径(可能不正确)。

  2. 没有安装正确的视频编解码器,在这种情况下,您需要安装编解码器,然后重新编译并重新安装OpenCV(有关完整的教程列表,请参阅本页:https://www.pyimagesearch.com/opencv-tutorials-resources-guides/?_ga=2.139358459.955629704.1643158794-1706104520.1639213599)。

  3. 无法通过OpenCV访问您的网络摄像头。这可能是由于多种原因造成的,包括缺少驱动程序、传递给CV2.VideoCapture的索引不正确,或者只是网络摄像头未正确连接到系统。

同样,处理视频文件比处理简单的图像文件要复杂得多,所以要确保在解决问题时系统化。

首先,尝试通过一个独立于OpenCV的软件访问网络摄像头。

或者,尝试将视频文件加载到电影播放器中。

如果这两种方法都有效,那么您的OpenCV安装可能会有问题。

否则,很可能是编解码器或驱动程序问题。

创建和解决OpenCV NoneType错误的示例

为了演示操作中的NoneType错误,我决定创建一个高度简化的Python+OpenCV脚本,它代表了您在PyImageSearch博客的其他地方可能看到的内容。

打开一个新文件,将其命名为display_image.py,并插入以下代码:

这个程序所做的只是:

  • 解析命令行参数。

  • (尝试)从磁盘加载映像。

  • 将图像的宽度、高度和深度打印到终端。

  • 将图像显示到屏幕上。

对于大多数熟悉命令行的Python开发人员来说,这个脚本不会给您带来任何麻烦。

但是,如果您是程序小白,对命令行参数不熟悉,如果不小心,很容易遇到NoneType错误。

你可能会说怎么做?

答案在于没有正确使用/理解命令行参数。

在过去的几年里,我运行这个博客,看到了许多读者的电子邮件和博客帖子评论,他们试图修改这个博客 .add_argument 以提供其图像文件的路径。

不要这样做——你不必更改一行参数解析代码。

相反,您应该花10分钟阅读这篇优秀的文章,解释什么是命令行参数以及如何在Python中使用它们:

https://pyimagesearch.com/2018/03/12/python-argparse-command-line-arguments/?_ga=2.154734704.955629704.1643158794-1706104520.1639213599

如果你想阅读PyImageSearch博客上的教程,这是必读的。

使用命令行,因此使用命令行参数,是计算机科学家的一个重要组成部分——缺乏命令行技能只会伤害你。你以后会感谢我的。

回到示例,让我们检查一下本地目录的内容:

我们可以看到,我有两个文件:

display_image.py:我将很快执行的Python脚本。

jemma.png : 我将从磁盘加载的照片。

如果我执行以下命令,我将看到jemma.png显示在我的屏幕上,以及有关图像尺寸的信息:

使用OpenCV和Python将图像加载并显示到我的屏幕上。

但是,让我们尝试加载一个不存在的映像路径:

果然,这是我们的    NoneType错误。

在本例中,这是因为我没有向CV2.imread提供有效的图像路。

总结

在这篇博文中,我讨论了OpenCV和Python中的NoneType错误和AssertionError异常。

在绝大多数情况下,这些错误可归因于CV2.imread或CV2.VideoCapture方法。

无论何时遇到这些错误之一,请确保在继续之前可以加载图像/读取帧。在超过95%的情况下,您的图像/帧没有被正确读取。

否则,如果您使用的是命令行参数,并且对它们不熟悉,则可能是您没有正确使用它们。在这种情况下,请务必阅读本教程中有关命令行参数的内容,以进行自我教育——稍后您将感谢我。

无论如何,我希望本教程能帮助您掌握OpenCV!

如果你刚刚开始学习计算机视觉和OpenCV,我强烈建议你看看这本书《实用Python和OpenCV》,这将帮助你掌握基础知识。(以下为书记链接)

https://www.pyimagesearch.com/practical-python-opencv/?_ga=2.160388981.955629704.1643158794-1706104520.1639213599

不然,也可以关注我,以便于第一时间看到新的文章和教程

没想到真么快,两天搞定一篇文章

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

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