将文件夹中的图像插入数据框

时间:2018-12-17 21:04:01

标签: python pandas numpy

我正在尝试将文件夹中的图像读取到数据框中,其中数据框中的每一行都是文件夹中的所有图像:

import cv2
import os,glob
import matplotlib.pylab as plt
from os import listdir,makedirs
from os.path import isfile,join
import pandas as pd
import PIL
import numpy as np
from scipy.ndimage import imread

pth = 'C:/Users/Documents/myfolder/'

folders =  os.listdir(pth)


videos = pd.DataFrame()
for folder in folders:
   pth_upd = pth + folder + '/'

   allfiles = os.listdir(pth_upd)
   files = []
   columns = ['data']
   index = [folders]
   for file in allfiles:
      files.append(file) if ('.bmp' in file) else None

      samples =  np.empty((0,64,64))
    for file in files:
       img = cv2.imread(os.path.join(pth_upd,file),cv2.IMREAD_GRAYSCALE)

       img = img.reshape(1,64,64)            
       samples = np.append(samples, img, axis=0)

    result = pd.DataFrame([samples], index=[folder], columns=['videos'])
    videos = videos.append(result)    

将每个文件夹中的所有图像读入(样本数组)后,如何在数据帧行中为每个文件夹插入图像

  

ValueError跟踪(最近一次通话最近)        在        17个样本= np.append(样本,img,轴= 0)        18岁   ---> 19结果= pd.DataFrame([样本],索引= [文件夹],列= ['视频'])        20个视频= videos.append(结果)

 ValueError: Must pass 2-d input

1 个答案:

答案 0 :(得分:0)

当然可以将调整大小后的图像字符串放入大熊猫中,但是有更好的方法来完成CNN训练。我修改了您的图像处理代码,以显示您可以如何执行所要求的操作:

import io
import pandas as pd
import numpy as np
import sklearn
import requests
import tempfile
import os
import cv2

# Image processing for the df
def process_imgfile(x):
  img = cv2.imread(os.path.join(
        x.Folder, x.image),cv2.IMREAD_GRAYSCALE)

  img = cv2.resize(img, (64, 64))
  img = str(img)
  return img

# Simulate folders with images in them
with tempfile.TemporaryDirectory() as f:
  f1 = os.path.join(f, "Folder1")
  f2 = os.path.join(f, "Folder2")
  os.mkdir(f1)
  os.mkdir(f2)
  print(r.status_code)
  for x in range(20):
    with open(os.path.join(f1, "f1-{}.jpg".format(x)), "wb") as file1, open(
        os.path.join(f2, "f2-{}.jpg".format(x)), "wb") as file2:

      r = requests.get(
      'https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg',
       stream=True)
      for chunk in r.iter_content(16): # File writing...
        file1.write(chunk)
        file2.write(chunk)

  result = [x for x in os.walk(f)]
  folder1 = result[1][2]
  folder2 = result[2][2]

  # Generate dataframe data
  j = {"Folder":[], "image":[]}

  for x in folder1:
    j["Folder"].append(result[1][0])
    j["image"].append(x)
  for x in folder2:
    j["Folder"].append(result[2][0])
    j["image"].append(x)

  # Use the process_imgfile function to append image data
  df = pd.DataFrame(j)
  df["imgdata"] = df.apply(process_imgfile, axis=1)

但是在大​​量图像上这是行不通的。相反,请查看ImageDataGenerator,它可以让您在训练和测试时加载图像。它还可以帮助您应用扩充或综合数据。