python - Python cv2.imread返回 'NoneType'对象没有属性 'shape'

标签 python opencv

我正在尝试从名为“Bilder”的文件夹中使用cv2.imread读取图片,但始终返回None。当我将图片放在“StraßenverkehrProjekt”文件夹(该文件夹中还保存我的代码[module.py]的文件夹)中时,它可以工作。

图片的文件夹路径:C:\Users\ramif\Desktop\Straßenverkehr Projekt\Bilder
代码的文件夹路径:C:/Users/ramif/Desktop/Straßenverkehr Projekt/module.py
追溯(最近通话):

File "c:/Users/ramif/Desktop/Straßenverkehr Projekt/module.py", line 12, in read_image print(img.shape)

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


import cv2
import matplotlib.pyplot as plt
import numpy as np
import os

def read_image():
    'reading the images'
    folder = os.path.join(os.path.dirname(__file__),"Bilder")
    for i in os.listdir(folder):
        img = cv2.imread(i)
        print(img.shape)

read_image()

最佳答案

cv2.imread令人讨厌的功能之一是,如果发生错误,它将不会引发异常。您必须检查返回值。 “NoneType”始终是找不到文件的线索。有很多方法可以解决此问题。从您的代码开始,我想到的最简单的方法是使用os.chdir将工作目录更改为图片所在的位置:

import cv2
import matplotlib.pyplot as plt
import numpy as np
import os

def read_image():
    'reading the images'
    folder = os.path.join(os.path.dirname(__file__),"Bilder")
    os.chdir(folder)
    for i in os.listdir(folder):
        img = cv2.imread(i)
        print(img.shape)

read_image()

另一种解决方案是在for循环中使用os.path.join,即
for i in os.listdir(folder):
    fullpath = os.path.join(folder, i)
    img = cv2.imread(fullpath)
    print(img.shape)

@ gautam-bose答案应该适用于Linux系统,但是我忘记了Python希望路径分隔符在Windows中看起来像什么。如果您使用print(folder),则可以了解分隔符是什么。

关于python - Python cv2.imread返回 'NoneType'对象没有属性 'shape',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62121615/

相关文章:

python - boto库如何读取飞行状态消息并删除

python - 如何导入和猴子修补与测试位于不同包中的 Python 模块?

javascript - 如何在 Python 中使用 RobotFramework SeleniumLibrary 使用 JavaScript 单击 WebElement?

python - 中断事件循环后清理的正确方法是什么?

opencv - 使用 cv::StereoBM 进行视差计算的 CvStereoBMState 文档

python - 矩形感兴趣区域超出范围时出错 - opencv

python - Opencv 与 wxpython 的集成

python - pandas groupby 有两个键

opencv - 如何使用Java API在OpenCV中执行DoG

opencv - 无法在 mac osx 上使用brew或make安装opencv