如何使用 Python 和 OpenCV 从目录中读取图像?

use*_*674 1 python opencv

我写了以下代码:

import os
import cv2
import random
from pathlib import Path

path = Path(__file__).parent
path = "../img_folder"
for f in path.iterdir():

    f = str(f)

    img=cv2.imread(f)

    im_height = img.shape[0]
    im_width = img.shape[1]
Run Code Online (Sandbox Code Playgroud)

但是当我运行此代码时,出现以下错误:

AttributeError: 'NoneType' 对象在 im_height = img.shape[0] 中没有属性 'shape'。

我想我无法访问图像,所以我写了print(img)andprint(type(omg))并且 None& 被返回。img_folder是一个包含 10 个图像的文件夹。当我打印出来时f,我得到:

../img_folder/.DS_Store

我不知道为什么.DS_Store包含因为img_folder只有图像。我应该如何解决这个问题?我应该怎么写这个?为什么我无法访问图像?

Kin*_*t 金 5

您至少发布了三个关于使用“PostPath”获取文件名的问题。糟糕。

更好的方法是使用glob.glob获取特定类型的文件名。

$ tree .
??? a.txt
??? feature.py
??? img01.jpg
??? img01.png
??? imgs
?   ??? img02.jpg
?   ??? img02.png
??? tt01.py
??? tt02.py
??? utils.py

1 directory, 9 files
Run Code Online (Sandbox Code Playgroud)

从当前目录:

import glob
import itertools

def getFilenames(exts):
    fnames = [glob.glob(ext) for ext in exts]
    fnames = list(itertools.chain.from_iterable(fnames))
    return fnames


## get `.py` and `.txt` in current folder
exts = ["*.py","*.txt"]
res = getFilenames(exts)
print(res)
# ['utils.py', 'tt02.py', 'feature.py', 'tt01.py', 'a.txt']


# get `.png` in  current folder and subfolders
exts = ["*.png","*/*.png"]
res = getFilenames(exts)
print(res)
# ['img01.png', 'imgs/img02.png']
Run Code Online (Sandbox Code Playgroud)