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

时间:2015-05-14 06:18:49

标签: python opencv

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

9 个答案:

答案 0 :(得分:23)

为什么不尝试加载文件夹中的所有文件?如果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

答案 1 :(得分:10)

我用了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)

答案 2 :(得分:8)

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

答案 3 :(得分: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

答案 4 :(得分:5)

你可以使用glob函数来做到这一点。见例子

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

答案 5 :(得分:0)

要添加到Rishabh的答案中,并使其能够处理不是在该文件夹中找到的图像的文件。

import matplotlib.image as mpimg

images = []
folder = './your/folder/'
for filename in os.listdir(folder):
    try:
        img = mpimg.imread(os.path.join(folder, filename))
        if img is not None:
            images.append(img)
    except:
        print('Cant import ' + filename)
images = np.asarray(images)

答案 6 :(得分:0)

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

import cv2
import glob

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

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

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]

答案 7 :(得分:0)

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)) 

答案 8 :(得分:-1)

import cv2 as cv
import glob

images = glob.glob("*.jpg")
for image in images:
    img = cv.imread(image, 1)