在运行程序时经常会遇到NoneType相关的错误,主要是两种可能缘由:
(1)cv2.imread()加载图像的路径无效
(2)经过cv2.VideoCapture或cv2.read从视频中读取图像存在问题python
在Python使用过程当中会遇到这样的错误:
AttributeError: 'NoneType' object has no attribute ‘something’
something能够用实际属性的名称替换
当咱们认为咱们正在使用特定类或对象的实例时会看到这些错误,其实是Python内置类型’None‘,’None‘ 表示缺乏值,好比当函数调用返回意外结果或彻底失败时。
下面是个python遇到NoneType错误的例子:网络
>>> foo = None >>> foo.bar = True Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'NoneType' object has no attribute 'bar'
建立变量foo,赋值为None,尝试赋值foo.bar=True , 可是因为foo 是一个None对象,Python不容许这样作-所以出现错误消息ide
超过95%的NoneType错误是和cv2.imread或cv2.VideoCapture有关,举一下两个例子:
(1)cv2.imread()加载图像的路径无效函数
$ python >>> import cv2 >>> path = "path/to/image/that/does/not/exist.png" >>> image = cv2.imread(path) >>> print(image.shape) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'NoneType' object has no attribute 'shape'
cv2.imread()接受图像路径并不会报错(即便它不存在),显示图像时发现路径无效,而后返回None。
当尝试传递无效的图片(即None图像)到另外一个OpenCV函数中,Python + OpenCV会报错该图像没有任何宽度,高度或深度信息等:翻译
>>> import cv2 >>> path = "path/to/image/that/does/not/exist.png" >>> image = cv2.imread(path) >>> gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /tmp/opencv20150906-42178-3d0iam/opencv-2.4.12/modules/imgproc/src/color.cpp, line 3739 Traceback (most recent call last): File "<stdin>", line 1, in <module> cv2.error: /tmp/opencv20150906-42178-3d0iam/opencv-2.4.12/modules/imgproc/src/color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cvtColor
更罕见的错误是假设在磁盘上有一个.JPEG文件,而且确切知道该文件 正确的路径。而后经过cv2.imread()加载JPEG文件,报错NoneType或者断言错误 ,多是忘记了在启用JPEG文件支持的状况下编译OpenCV,固然若是按照我推荐的pip安装是不会出现这个问题的
(2)cv2.VideoCapture()视频截取错误
cv2.VideoCapture()接受一个参数能够是字符串,表明视频路径;或者是整数,表明摄像头的索引。所以报错NoneType缘由多是:3d
排查问题:首先,尝试经过OpenCV以外的软件访问网络摄像头,或者尝试在电影播放器中打开视频。若是这两种方法都起做用,则OpenCV安装可能有问题。不然,极可能是编解码器或驱动程序问题。code