Python 3.x 词典和OpenCV的Python列表理解

Python 3.x 词典和OpenCV的Python列表理解,python-3.x,opencv,dictionary,list-comprehension,Python 3.x,Opencv,Dictionary,List Comprehension,当我运行这个程序时,Python在arr上坐了很久。它只是缓慢地消耗RAM,不做其他事情: import os import glob import cv2 root = r'path\to\img' files = glob.iglob( os.path.join(root,'*.jpg') ) arr = [ { 'img_nm' : fl, 'img' : cv2.imread( fl ) } for fl in files ] 任何帮助都将不胜感激。这将一次性

当我运行这个程序时,Python在
arr
上坐了很久。它只是缓慢地消耗RAM,不做其他事情:

import os
import glob
import cv2

root = r'path\to\img'

files = glob.iglob( os.path.join(root,'*.jpg') )

arr = [ { 'img_nm' : fl,
          'img' : cv2.imread( fl ) } for fl in files ]
任何帮助都将不胜感激。

这将一次性构建整个数据集

arr = [ { 'img_nm' : fl,
          'img' : cv2.imread( fl ) } for fl in files ]
因此,对于冗长的处理,它将需要很长的时间来运行,同时将整个结果存储在内存中。最好是一次处理一张图像,处理方式如下:

for fl in glob.iglob( os.path.join(root,'*.jpg') ):
    new_image_record = { 
        'img_nm' : fl,
        'img' : cv2.imread( fl )
    }
    # save new record

目录中有多少文件?我有96135个文件我正在尝试使用并行处理来扩充这些图像…迭代器/生成器方法也很好。我不会在这里使用迭代器。与处理图像的时间相比,循环的开销不太可能很大。一次处理一张图片。为了学习,我的问题出现的原因是什么?它是否试图一次将所有图像读入内存?