我想在调整大小后将jpeg转换为像素。该程序运行得很好,图像较少。当我尝试使用更多数量的图像(比如10k)时,它运行2到3个小时。有没有办法改善表现?
import os as s
import numpy as np
import scipy
from PIL import Image
from scipy import ndimage
import warnings
warnings.filterwarnings('ignore')
def imaget_to_pxl(path,size):
img_to_pxls=np.zeros(shape=(1,size*size*3))
img_name={'name':0}
N=1
#print img_to_pxls.shape
for i in s.listdir(path):
if i.endswith('.jpg'):
new_size=(size,size)
im = Image.open(path+i, 'r')#.resize(new_size)
pixel_values = list(im.getdata())
if im.mode == 'RGB':
my_image = scipy.misc.imresize(im, size=new_size)#.reshape((1,-1))
img_to_pxls=np.concatenate((img_to_pxls,my_image.reshape((1,-1))))
return img_to_pxls
答案 0 :(得分:0)
您似乎尝试构建一个在每次迭代中都在增长的numpy数组。这是你应该不惜一切代价避免的事情!
img_to_pxls=np.zeros(shape=(1,size*size*3))
# later loop
my_image = scipy.misc.imresize(im, size=new_size)#.reshape((1,-1))
img_to_pxls=np.concatenate((img_to_pxls,my_image.reshape((1,-1)))) # !
请注意,在分配新数组(增加大小)并复制所有值时调整numpy-array效果!这将在每次迭代中发生,包含越来越大的数组。
使img_to_pxls
成为一个python-list(行为不同!),在收集所有图像时附加新条目并构建一个numpy-array。
像(未经测试)的东西:
img_to_pxls = []
...
my_image = scipy.misc.imresize(im, size=new_size)#.reshape((1,-1))
img_to_pxls.append(my_image)
...
return np.array(img_to_pxls)
在尝试优化任何内容之前,始终使用一些分析工具来检查代码中的慢速部分。使用例如line_profiler
你会立即发现这个瓶颈。