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

标签 python python-3.x opencv 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()

出现以下错误

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 

最佳答案

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

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

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

plt.imshow(read_images[0])

关于python - 如何从python中的多个文件夹中读取多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537604/

相关文章:

opencv - opencv Mat从Vector的模板初始化

python - Voronoi图的轮廓坐标

python - Django - 在查询中加入 2 个模型

python - Tkinter 进度条挂起程序并且不继续

python - 如何解决Keras中 `TypeError: ' Tensor'对象不支持项赋值`的问题

python - 了解 Python 3.7 中的 For 循环执行

python - 获取 "' NoneType' 对象没有属性 'items'“PIL 库错误

python - 使用其中一个子词典的值对所有子词典进行排序

python - 我想更改 python 中读取数组的顺序,是否必须使用 reshape?

c++ - OpenCV Rect x和y代表(column,row)或(row,column)