使用来自给定文件夹的imread加载所有图像

use*_*986 22 python opencv

在OpenCV中加载和保存图像非常有限,因此...从给定文件夹加载所有图像的首选方法是什么?我应该使用.png或.jpg扩展名搜索该文件夹中的文件,存储名称并使用imread每个文件吗?或者,还有更好的方法?

der*_*icw 27

为什么不尝试加载文件夹中的所有文件?如果OpenCV无法打开它,哦.继续下一步. 如果无法打开图像,则cv2.imread()返回None.有点奇怪,它不会引发异常.

import cv2
import os

def load_images_from_folder(folder):
    images = []
    for filename in os.listdir(folder):
        img = cv2.imread(os.path.join(folder,filename))
        if img is not None:
            images.append(img)
    return images
Run Code Online (Sandbox Code Playgroud)


小智 13

我用过skimage.您可以使用标准方式创建集合和访问元素,即col [index].这将为您提供RGB值.

from skimage.io import imread_collection

#your path 
col_dir = 'cats/*.jpg'

#creating a collection with the available images
col = imread_collection(col_dir)
Run Code Online (Sandbox Code Playgroud)


小智 9

import glob
cv_img = []
for img in glob.glob("Path/to/dir/*.jpg"):
    n= cv2.imread(img)
    cv_img.append(n)`
Run Code Online (Sandbox Code Playgroud)

  • 这可行,但文件没有任何特定的顺序。 (2认同)
  • 只需通过 list = sort(glob.glob("Path/to/dir/*.jpg"))) 对其进行排序即可。 (2认同)

Nir*_*mal 9

如果所有图像的格式相同:

import cv2
import glob

images = [cv2.imread(file) for file in glob.glob('path/to/files/*.jpg')]
Run Code Online (Sandbox Code Playgroud)

用于读取不同格式的图像:

import cv2
import glob

imdir = 'path/to/files/'
ext = ['png', 'jpg', 'gif']    # Add image formats here

files = []
[files.extend(glob.glob(imdir + '*.' + e)) for e in ext]

images = [cv2.imread(file) for file in files]
Run Code Online (Sandbox Code Playgroud)


Ris*_*ari 7

您也可以使用matplotlib,试试这个:

import matplotlib.image as mpimg

def load_images(folder):
    images = []
    for filename in os.listdir(folder):
        img = mpimg.imread(os.path.join(folder, filename))
        if img is not None:
            images.append(img)
    return images
Run Code Online (Sandbox Code Playgroud)


小智 6

import os
import cv2
rootdir = "directory path"
for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        frame = cv2.imread(os.path.join(subdir, file)) 

Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以为OP的问题提供解决方案,但最好添加有关其工作原理/原因的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。当代码被解释时,您也可能会以点赞的形式得到用户的积极反馈。 (4认同)

ope*_*guy 5

您可以使用glob函数来执行此操作。看例子

import cv2
import glob
for img in glob.glob("path/to/folder/*.png"):
    cv_img = cv2.imread(img)
Run Code Online (Sandbox Code Playgroud)