Skip to main content
 首页 » 编程设计

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

2025年05月04日17freeliver54

我写了下面的代码:

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] 

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

AttributeError: 'NoneType' object has no attribute 'shape' in im_height = img.shape[0].

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

../img_folder/.DS_Store

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

请您参考如下方法:

您至少发布了三个关于使用“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 

从当前目录:

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']