首页 > 解决方案 > NoneType' 对象不可下标

问题描述

在代码中得到下面的错误

TypeError: 'NoneType' object is not subscriptable
line : crop_img = img[70:300, 70:300]

谁能帮我解决这个问题?

多谢

        img_dofh = cv2.imread("D.png",0)
        ret, img = cap.read()
        cv2.rectangle(img,(60,60),(300,300),(255,255,2),4) #outer most rectangle
        crop_img = img[70:300, 70:300]
        crop_img_2 = img[70:300, 70:300]

        grey = cv2.cvtColor(crop_img, cv2.COLOR_BGR2GRAY)

标签: pythonopencv

解决方案


你没有显示你的img变量来自哪里。但不知何故,它None不是包含图像数据。

当您编写一个应该返回有效对象的函数时,通常会发生这种情况img,但您忘记return在函数中包含一条语句,因此它会自动返回None

检查创建img.

更新

回复您的代码发布:

如果您能提供一个最小的、可重现的示例,那将会很有帮助。这可能看起来像这样:

import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened():
    ret, img = cap.read()
if img is None:
    print("img was not returned.")
else:
    crop_img = img[70:300, 70:300]       
    print(crop_img)  # should show an array of image data

查看文档,当您到达代码中的这一点时,您的相机可能还没有抓取任何帧。文档说“如果没有抓取任何帧(相机已断开连接,或者视频文件中没有更多帧),则方法返回 false 并且函数返回 NULL 指针。” 我敢打赌,该.read()函数正在返回一个 NULL 指针,该指针None在它被发送回 Python 时被转换。

不幸的是,由于没有其他人拥有您的特定相机设置,其他人可能无法重现您的问题。

上面的代码在我的 MacBook Pro 上运行良好,但我必须在第一次尝试时授予终端使用相机的权限。您是否尝试过重新启动终端应用程序?您的程序是否可以访问相机?


推荐阅读