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

时间:2018-03-28 14:44:59

标签: python python-3.x opencv anaconda

我在python 3.6中编写了一个图像识别程序,我正在使用anaconda。我的图像数据集存储在E:\ food-101 \ images中,其中' 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()

我收到以下错误

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 

1 个答案:

答案 0 :(得分:2)

一种简单的方法是安装Glob。您可以使用pip install glob从anaconda提示符执行此操作。

Glob允许您像在终端中一样查询文件。拥有Glob后,您可以将所有文件名保存到列表中,然后遍历此列表,将图像(numpy数组)读入新列表。

import cv2
import numpy
import glob
import pylab as plt

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

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

plt.imshow(read_images[0])