How to read images from a directory with Python and OpenCV?

后端 未结 3 944
野趣味
野趣味 2021-01-24 17:08

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         


        
相关标签:
3条回答
  • 2021-01-24 17:15

    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]
    
    0 讨论(0)
  • 2021-01-24 17:20

    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)
    
    0 讨论(0)
  • 2021-01-24 17:32

    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']
    
    0 讨论(0)
提交回复
热议问题