如何从python中的多个文件夹中读取多个图像

aak*_*aku 2 python opencv python-3.x anaconda

我正在使用 anaconda 在 python 3.6 中编写图像识别程序。我将图像数据集存储在位置 E:\food-101\images 中,其中“图像”文件夹包含多个包含照片的子文件夹. 我想使用这些图像来训练我的机器学习模型。我能够加载(读取)存储在 E:\ 中的单个图像我想从上述路径加载多个图像我该如何进行?我正在使用 opencv。我的代码如下任何帮助表示赞赏

import cv2
import matplotlib
import numpy
img = cv2.imread("E:\food\images\chicken_wings\a.jpg",cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Traceback (most recent call last):

  File "<ipython-input-8-6310b5f3028e>", line 5, in <module>
    cv2.imshow('image',img)

error: OpenCV(3.4.1) C:\bld\opencv_1520732670222\work\opencv-3.4.1\modules\highgui\src\window.cpp:356: error: (-215) size.width>0 && size.height>0 in function cv::imshow


Traceback (most recent call last):

  File "<ipython-input-8-6310b5f3028e>", line 5, in <module>
    cv2.imshow('image',img)

error: OpenCV(3.4.1) C:\bld\opencv_1520732670222\work\opencv-3.4.1\modules\highgui\src\window.cpp:356: error: (-215) size.width>0 && size.height>0 in function cv::imshow 
Run Code Online (Sandbox Code Playgroud)

D.G*_*ths 6

一个简单的方法是安装 Glob。您可以在 anaconda 提示符下使用pip install glob.

Glob 允许您像在终端中一样查询文件。一旦你有了 Glob,你就可以将所有文件名保存到一个列表中,然后遍历这个列表,将你的图像(NumPy 数组)读取到一个新列表中。

import cv2
import numpy
import glob

folders = glob.glob('path\\to\\folder\\containing\\folders\\*')
imagenames_list = []
for folder in folders:
    for f in glob.glob(folder+'/*.jpg'):
        imagenames_list.append(f)

read_images = []        
for image in imagenames_list:
    read_images.append(cv2.imread(image, cv2.IMREAD_GRAYSCALE))
Run Code Online (Sandbox Code Playgroud)

然后您可以通过索引它来访问图像,即

plt.imshow(read_images[0])
Run Code Online (Sandbox Code Playgroud)