转换列表为numpy数组时内存错误
我总共有大约7000张图片,我从中提取了HoG特征。接下来,我想把这些特征的列表转换成一个np数组,以便进行进一步处理。但是在转换的时候,我遇到了内存错误。
这是我代码中相关的部分:
from skimage import data, io, filter, color, exposure
from skimage.feature import hog
from skimage.transform import resize
import matplotlib.pyplot as plt
import numpy as np
tmp_hogs = [] # this is the list I need to convert into a numpy array
for group in samplegroups:
for myimg in group:
curr_img = np.array(myimg, dtype=float)
imgs.append(curr_img)
fd, hog_image = hog(curr_img, orientations=8, pixels_per_cell=(4, 4),
cells_per_block=(1, 1), visualise=True, normalise=True)
tmp_hogs.append(fd)
img_hogs = np.array(tmp_hogs, dtype =float)
我遇到的错误是:
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\app\anacondasoftware\lib\threading.py", line 810, in __bootstrap_inner
self.run()
File "C:\Users\app\anacondasoftware\lib\site-packages\spyderlib\widgets\externalshell\monitor.py", line 582, in run
already_pickled=True)
File "C:\Users\app\anacondasoftware\lib\site-packages\spyderlib\utils\bsdsocket.py", line 45, in write_packet
nsend -= temp_fail_retry(socket.error, sock.send, sent_data)
File "C:\Users\app\anacondasoftware\lib\site-packages\spyderlib\utils\bsdsocket.py", line 25, in temp_fail_retry
return fun(*args)
error: [Errno 10054] An existing connection was forcibly closed by the remote host
Traceback (most recent call last):
File "C:\Users\app\Documents\Python Scripts\gbc_carclassify.py", line 63, in <module>
img_hogs = np.array(tmp_hogs, dtype =float)
MemoryError
我该怎么解决这个问题呢?
1 个回答
5
对于RGB或RGBA图像,每个颜色值只需要8位。而如果你使用float
类型的话,每个值会占用64位,这样就浪费了很多空间。建议你使用np.uint8
,这样可以节省内存:
img_hogs = np.array(tmp_hogs, dtype=np.uint8)