(注:本文节选自AdrianRosebrock的教程文章翻译后)。在运行程序时,经常会遇到NoneType相关的错误。可能的原因有两个:(1)cv2.imread()加载的图片路径无效(2)通过cv2.VideoCapture或cv2.read从视频中读取图片有问题1.Python中的NoneType错误在使用Python的过程中,你会遇到这样的错误:AttributeError:'NoneType'objecthasnoattribute'something'somethingcanbereplacedwiththenameoftheactualattribute当我们认为我们正在使用特定类或对象的实例时,我们会看到这些错误,而实际上Python内置类型'None','None'表示缺失值,例如当函数调用返回意外结果或完全失败时。这是Python遇到NoneType错误的示例:>>>foo=None>>>foo.bar=TrueTraceback(mostrecentcalllast):File"",line1,inAttributeError:'NoneType'objecthasnoattribute'bar'createsvariablefoo,assignsNone,triestoassignfoo.bar=True,但由于foo是一个None对象,Python不允许这样做-因此错误消息2.Introducing95%ofOpenCVNoneType错误95%以上的NoneType错误的两个原因与cv2.imread或cv2.VideoCapture有关。下面举两个例子:(1)cv2.imread()加载图片的路径无效$python>>>importcv2>>>path="path/to/image/that/does/not/exist.png">>>image=cv2.imread(path)>>>print(image.shape)Traceback(最近调用最后):文件“”,第1行,在AttributeError:'NoneType'对象没有attribute'shape'cv2.imread()接受图片路径不报错(即使不存在),显示图片时发现路径无效,然后返回None。当尝试将无效图像(即无图像)传递给另一个OpenCV函数时,Python+OpenCV将报告图像没有任何宽度、高度或深度信息等:>>>importcv2>>>path="path/to/image/that/does/not/exist.png">>>image=cv2.imread(path)>>>gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)OpenCV错误:断言失败(scn==3||scn==4)在cvtColor中,文件/tmp/opencv20150906-42178-3d0iam/opencv-2.4.12/modules/imgproc/src/color.cpp,第3739行Traceback(最后一次调用):文件“”,第1行,在cv2.error:/tmp/opencv20150906-42178-3d0iam/opencv-2.4.12/modules/imgproc/src/color.cpp:3739:error:(-215)scn==3||scn==4infunctioncvtColor一个更罕见的错误是假设你在磁盘上有一个.JPEG文件并且确切地知道该文件的正确路径。然后通过cv2.imread()加载JPEG文件,报NoneType错误或者断言错误。可能是您忘记在启用JPEG文件支持的情况下编译OpenCV。当然,如果你按照我推荐的pip安装,就不会出现这个问题(2)cv2.VideoCapture()视频采集错误cv2.VideoCapture()接受一个参数,可以是一个字符串,代表视频路径;或一个整数,代表相机的索引。所以报错NoneType的原因可能是:输入的视频文件路径不对,没有安装正确的视频编解码器。在这种情况下,您需要安装编解码器,然后重新编译并重新安装OpenCV。无法通过OpenCV访问网络摄像头。这可能是由于多种原因造成的,包括缺少驱动程序、传递给cv2的相机索引错误,或者只是网络摄像头未正确连接到系统在播放器中打开视频。如果这两种方法都有效,则您的OpenCV安装可能存在问题。否则,可能是编解码器或驱动程序问题。