如何通过Google colab读取所有图像的形状并将其显示在数据集文件夹中?

时间:2019-02-17 00:14:51

标签: python opencv deep-learning

我正在尝试在google colab上训练我的图像数据集。我在colab中有数据集文件夹。当尝试从colab中的目录读取图像时,我只能够读取所有图像的文件名。但是,如果我尝试提取数组中图像的形状,则使用不同的方法会产生不同的错误。我已经尝试过使用 os 库和 PIL.Image 甚至是 pickle ,但是我仍然无法排序甚至猜测是什么原因。问题。

我得到的错误是:

  

1)AttributeError:“列表”对象没有属性“读取”
  2)AttributeError:“列表”对象没有属性“搜索”

在for循环中使用os.walk(path)函数并从路径中存在的所有文件的结果列表中拾取文件时,两者都是如此。

  

3)FileNotFoundError:[错误2]没有这样的文件或目录:'7119-220.jpg'

这似乎很奇怪,因为每次运行代码时都专门针对同一文件。通过使用try和FileNotFoundError除外,我没有任何输出。

问题:我没有得到什么错误?

import os
import matplotlib.pyplot as plt
import time
import numpy as np
from PIL import Image

imagesPath = 'Neural_Net-for-Concrete-Crack-Detection/Wall_crack_dataset/W/CW'

target_names = [item for item in os.listdir(imagesPath)
                if os.path.isdir(os.path.join(imagesPath, item))]
number_train_samples = sum([len(files) for _, _, files in os.walk(imagesPath)])  

image = np.zeros((256, 256), dtype=int)

total_number_samples = number_train_samples

print('Training a CNN Multi-Classifier Model ......')
print(' - # of trained samples: ', number_train_samples, 
       '\n - total # of samples: ', total_number_samples)

此作品仅用于计算图像文件的数量。

from PIL import Image
import os
i=0
image = np.zeros((256, 256), dtype='uint8')

imagesPath = 'Neural_Net-for-Concrete-Crack-Detection/Wall_crack_dataset/W/CW'

for _, _, files in os.walk(imagesPath):
  for file in files:
    image = Image.open(file)

如果我在要绘制的目录中指定一个特定的图像文件,但不是全部都使用,则此代码效果更好。

1 个答案:

答案 0 :(得分:0)

os.walk(...)产生一个三元组(dirpath, dirnames, filenames)。因此,您应该尝试打开os.path.join(dirpath, file)而不是file

from PIL import Image
import os
i=0
image = np.zeros((256, 256), dtype='uint8')

imagesPath = 'Neural_Net-for-Concrete-Crack-Detection/Wall_crack_dataset/W/CW'

for dirpath, _, files in os.walk(imagesPath):  # <--
  for file in files:
    image = Image.open(os.path.join(dirpath, file))  # <--

如果您需要形状为dataset的{​​{1}},并且想要坚持使用(n_samples, channels, height, width),则可以执行以下操作:

PIL.Image

请注意,它要求所有图像都具有相同的dataset_dir = "[DATASET_DIR]" dataset = np.asarray([ np.asarray( # convert from PIL.Image to np.array Image.open(os.path.join(dirpath, img_fname)) # open image ).transpose((2,0,1)) # change from (H,W,C) to (C,H,W) for dirpath, _, fnames in os.walk(dataset_dir) # scan the `dataset_dir` for img_fname in fnames # for each file in `dataset_dir` ])