OpenCV NoneType对象没有属性形状

时间:2016-10-03 14:16:43

标签: python opencv raspberry-pi2

您好我正在使用OpenCV开发Raspberry Pi。我想尝试一个链接中的球跟踪教程 http://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/

但是当我编译它时,我得到一个错误:'NoneType'对象没有属性'shape'。

我该怎么办?

13 个答案:

答案 0 :(得分:13)

这意味着某个应该返回图像的函数只返回None,因此没有shape属性。尝试     “print img” 检查你的图像是否为无或实际的numpy对象。

答案 1 :(得分:5)

我今天遇到了同样的问题,请检查cybseccrypt提到的图像路径。在imread之后,尝试打印图像并查看。如果你得到一个值,就意味着文件打开了,

img_src = cv2.imread('/home/deepak/python-workout/box2.jpg',0) print img_src

希望这有帮助!

答案 2 :(得分:3)

您可能会收到错误,因为您的视频路径在某种程度上可能有误。确保您的路径完全正确。

答案 3 :(得分:2)

我也遇到了这个问题,浪费了很多时间进行调试。

首先,请确保您提供的路径有效,即该路径中有一张图片。

接下来,您应该注意 Opencv不支持包含Unicode字符的图像路径(请参阅ref)。如果您的图像路径包含Unicode字符,则可以使用以下代码读取图像:

import numpy as np
import cv2

# img is in BGR format if the underlying image is a color image
img = cv2.imdecode(np.fromfile(im_path, dtype=np.uint8), cv2.IMREAD_UNCHANGED)

答案 4 :(得分:0)

尝试处理错误,它是OpenCV给出的属性错误

try:
    img.shape
    print("checked for shape".format(img.shape))
except AttributeError:
    print("shape not found")
    #code to move to next frame

答案 5 :(得分:0)

这是因为图像路径错误或您写入的图像名称不正确。

如何检查? 首先尝试使用打印图像        打印(img) 如果它显示“ None”(无),则表示您输入了错误的图像路径,请纠正该路径,然后重试。

答案 6 :(得分:0)

我只是遇到了同样的问题。我通过更新最新版本的OpenCV来解决此问题。对我来说效果很好。希望你也没事。

答案 7 :(得分:0)

希望这可以帮助遇到相同问题的任何人

要确切地知道发生在哪里,因为正在运行的程序并未将其提及为行号错误

'NoneType' object has no attribute 'shape'

请确保在加载assert后添加image/frame

对于图片

image = cv2.imread('myimage.png')
assert not isinstance(image,type(None)), 'image not found'

对于视频

cap = cv2.VideoCapture(0)

    while(cap.isOpened()):

        # Capture frame-by-frame
        ret, frame = cap.read()
        if ret:
            assert not isinstance(frame,type(None)), 'frame not found'

用长篇幅的脚本帮助我解决了类似的问题

答案 8 :(得分:0)

我处理人工创建的图像,即我自己创建它们,然后在它们上训练神经网络以执行特定任务。 因此,我创建了这些图像并保存了它们,但是当我尝试使用cv2.imread(...)打开它们时,出现了此错误。事实证明,当人工保存 创建的图像,您需要添加 dtype = np.uint8 。那为我解决了这个问题!

答案 9 :(得分:0)

我也遇到同样的问题“ OpenCV NoneType对象没有属性形状”,我​​通过更改图像位置来解决此问题。我也使用PyCharm IDE。目前,我的图像位置和类文件位于同一文件夹中。 enter image description here

答案 10 :(得分:0)

我有同样的问题。我打开了另一个使用笔记本电脑的摄像头的程序。因此,我关闭了该程序,然后一切正常。我通过检查https://howto.streamlabs.com/streamlabs-obs-9/black-screen-when-using-video-capture-device-elgato-hd-60s-9508找到了这个答案。

答案 11 :(得分:0)

我遇到了cap = cv2.VideoCapture(0)的问题。我将其更改为cap = cv2.VideoCapture(1),然后它起作用了。由于未链接到正确的网络摄像头,因此它什么也没返回。也许这会帮助好运。

答案 12 :(得分:0)

我在尝试查找照片大小时遇到​​此错误。

Exception has occurred: AttributeError 'NoneType' object has no attribute 'shape'

在谷歌搜索大约 10 分钟后,我发现了这个链接 OpenCV: Resolving NoneType errors by Adrian Rosebrock。在那篇文章中他提到

<块引用>

传递给 cv2.imread 的无效图像路径

虽然这确实解决了我的问题,但我希望它能解决您的问题。如果没有,我希望你也能在那个页面上找到一些有用的东西