如何解决' NoneType'对象不可订阅是opencv

时间:2017-06-23 06:38:06

标签: python-3.x opencv

我是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

1 个答案:

答案 0 :(得分: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)

如果无法加载图片(例如用户将文件传入您的脚本), test 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)