'NoneType'对象不可下标python

时间:2019-11-22 02:32:59

标签: python opencv

def crop (img_path):
    img = cv.imread(img_path)
    img_crop = img[60:140,0:320,:]
    for a in labels:
        cv.imwrite(path_save+a, img_crop)

当我运行这段代码时,它表明:

  

TypeError: 'NoneType' object is not subscriptable

2 个答案:

答案 0 :(得分:0)

这是试图下标变量img_crop的行:

img_crop = img[60:140,0:320,:]

因此,在循环中的某个时刻,cv.imread(img_path)返回None。一个简单的布尔if语句将跳过错误:

def crop (img_path):
    img = cv.imread(img_path)
    if img:
        img_crop = img[60:140,0:320,:]
        for a in labels:
            cv.imwrite(path_save+a, img_crop)

答案 1 :(得分:0)

您应该仔细检查打开的图像是否确实存在。从您与我们共享的代码来看,cv.imread(img_path)似乎返回None,然后当您尝试通过索引访问None的内容时,在下一行中引发了错误。

因此,我的建议是如下更新代码:

def crop (img_path):
    img = cv.imread(img_path)
    if img is None:
        # todo handle bad/nonexisting img case
        pass
    img_crop = img[60:140,0:320,:]
    for a in labels:
        cv.imwrite(path_save+a, img_crop)

或者让您确保在调用此函数的代码中,您在此处传递的路径始终正确。