我编写了一个使用Python的opencv读取图像的程序,并尝试加载3 GB图像,但程序已中止。 我的电脑上有32 GB的内存,但是当我运行这个程序时,它将耗尽它。原因是什么?
未发出错误消息且PC异常沉重。我用Ubuntu的系统监视器确认了它,内存和交换耗尽。
我将图像导入一个数组以传递给tensorflow深度学习程序。图像的大小为200 x 200彩色图像。
我使用的是64位版本的Python。
import os
import numpy as np
import cv2
IMG_SIZE = 200
def read_images(path):
dirnames = sorted(os.listdir(path))
files = [sorted(os.listdir(path+dirnames[i]))\
for i in range(len(dirnames))]
i = 0
images = []
for fs in files:
tmp_images = []
for f in fs:
img = cv2.imread(path +dirnames[i] + "/" + f)
img = cv2.resize(img, (IMG_SIZE, IMG_SIZE))
img = img.flatten().astype(np.float32)/255.0
tmp_images.append(img)
i = i + 1
images.append(tmp_images)
return np.asarray(images)
答案 0 :(得分:0)
内存不足的原因:
图像文件大小和内存中相应数组的大小不同。压缩图像,例如PNG和JPEG格式。相应的未压缩BMP图像的大小在此更相关。此外,ndarray
包含一些元信息,使其更大一些。
从float32
转换为uint8
会将大小乘以4.尽可能避免这种情况(我认为uint8
会产生一些限制,例如无法规范化和居中数据)。
可能的补救措施: