我正在开发一个应用程序,加载大的JPEG2000图像,并将它们转换为TIF。然后,它提取像素数据,并进行一些处理。它完美地工作,除了在一种情况下:
当我加载最大的图像并提取数据(10956x10956数组)时,程序崩溃,但它只在Windows上崩溃,而不是在Linux上崩溃。(我想要可移植的应用程序)。
我检测到了这个问题,这是因为在将20x20插值到图像采样时出现了内存错误。
f=RectBivariateSpline(x,y,Sun_angles)
xnew = numpy.linspace(x.min(),x.max(),rows)
ynew = numpy.linspace(y.min(),y.max(),columns)
Sun_angles_new = f(xnew, ynew) #here it crashes我也尝试了interp2d和mapcoordinates,我得到了同样的结果。
Python应该是完全可移植的,但我的印象是针对Unix系统进行了优化(另请参阅:Running python on a Windows machine vs Linux)
注意:我在两台不同的计算机上运行该程序,但是使用相同的处理器和RAM。
因此..。可能的原因是什么?有没有其他内存消耗更少的插值方法?
注:一种解决方案是将图像分成平铺和插值。
发布于 2011-11-25 18:42:49
您应该在windows下检查应用程序的内存使用情况。考虑到原始图像的大小将为~360MB (假设为24位图像),如果您为每个像素分配内存,这将成倍增加,并且很容易超过32位地址空间的内存要求( windows应用程序的内存限制为~2 2GB)
在linux上,您可能运行的是64位linux,它运行的是64位版本的python。对于桌面应用程序来说,那里的限制几乎是无法达到的(在地址空间用完之前,交换空间就会用完)。
https://stackoverflow.com/questions/8267142
复制相似问题