I wrote the following code:
import os
import cv2
import random
from pathlib import Path
path = Path(__file__).parent
path = \"../img_folder\"
for f in path.iter
It is because of a hidden file in your directory. If you are sure your directory contains only images, you can ignore hidden files/folders like below.
use
for f in path.iterdir():
if not f.startswith('.'):
f = str(f)
img=cv2.imread(f)
im_height = img.shape[0]
im_width = img.shape[1]
The .DS_Store
file is a kind of hidden file, which is automatically generated (only on Mac OS), inside the various directories, which you may have opened using the Finder
application. I guess it is some sort of cache file for fast and easy rendering of directory structure in the Finder
. I have observed that it doesn't gets created if I do not open the directory with my Finder application.
To prevent this sort of errors, you must always check that the file you are going to read has a valid extension. It can be done as:
import os
for file_name in os.listdir("/path/to/your/directory"):
if file_name.split(".")[-1].lower() in {"jpeg", "jpg", "png"}:
img = cv2.imread("/path/to/your/directory/" + file_name)
You have post at least three questions about get filenames with "PostPath". Badly.
A better way is use glob.glob
to get the specific type of filenames.
$ tree .
├── a.txt
├── feature.py
├── img01.jpg
├── img01.png
├── imgs
│ ├── img02.jpg
│ └── img02.png
├── tt01.py
├── tt02.py
└── utils.py
1 directory, 9 files
From current directory:
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']