【问题标题】:How to solve the TypeError: 'NoneType' object is not subscriptable in opencv (cv2 Python)如何解决TypeError:'NoneType'对象在opencv(cv2 Python)中不可下标
【发布时间】:2017-06-23 06:38:05
【问题描述】:

我是 opencv 新手,我正在尝试打印像素。

import numpy as np
import cv2
img = cv2.imread('freelancer.jpg',cv2.IMREAD_COLOR)
px  = img[55,55]
print(px)

我来了

Traceback (most recent call last):
  File "C:/Users/Jeet Chatterjee/image processing/basic_image_op.py", line 6, in <module>
 px  = img[55,55]
TypeError: 'NoneType' object is not subscriptable

【问题讨论】:

  • 所以cv2.imread() 返回了None。您可以对此进行测试,或者尝试找出无法加载图像的原因。

标签: python-3.x opencv


【解决方案1】:

来自cv2.imread() documentation

函数imread 从指定的文件加载图像并返回。如果无法读取图像(由于缺少文件、权限不正确、格式不支持或无效),该函数返回一个空矩阵(Mat::data==NULL

文档倾向于针对 C++ API,但对于 Python,请阅读 返回 None 以了解后一种情况。

所以发生的事情是您的图像文件无法读取;它要么丢失,要么权限不正确,要么格式不受支持或无效。

鉴于您正在使用 相对路径 来加载文件,我会说它丢失了。 当前工作目录中缺少,这与您放置脚本的目录不同。

尽可能使用绝对路径来加载文件。如果您需要从与脚本相同的目录加载它,请使用脚本文件名作为起点:

import os.path
# construct an absolute path to the directory this file is located in 
HERE = os.path.dirname(os.path.abspath(__file__))

然后使用它作为加载文件的起点:

image_path = os.path.join(HERE, 'freelancer.jpg')
img = cv2.imread(image_path, cv2.IMREAD_COLOR)

如果可能无法加载图像(例如用户将文件传递给您的脚本),测试None

img = cv2.imread(image_path, cv2.IMREAD_COLOR)
if img is None:
    print("Can't load image, please check the path", file=sys.stderr)
    sys.exit(1)

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 2020-06-27
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多