我写了下面的代码:
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']
