我有一台相机,可以拍摄高分辨率图像并将它们存储为大矩阵。我正在尝试从数据中构建图像。(并且必须在 Python-32 位中完成。)
数据保存在 HDF5 中,我使用 h5py 访问它,但我无法在没有内存错误的情况下绘制数据,因为我知道的所有方法都需要将所有数据转储到计算机的内存中。(我只熟悉常用的 matplotlib 和 scipy 库。)
另外,当我尝试从数据中生成图像时,我遇到了同样的问题,但是在我之前提出的问题(在 Python 中构建高分辨率图像)中,有人告诉我 GDAL 能够从数据中生成图像。
我做了一些研究(似乎 GDAL for python 没有很好的文档记录)并遇到了这个问题:你可以在不加载整个图像的情况下遍历图像中的像素吗?. 提供的答案提供了一个快速脚本,可以逐行导入图像。有没有办法与此相反并逐行保存图像?这样我就不必将所有数据加载到内存中来保存图像。
或者是否有一种方法可以从 HDF5 数据集生成图像(最好是 PNG),该数据集太大而无法加载到内存中?
这是我一直在使用的一些示例代码:
import tables
import Image
import matplotlib.pyplot as plt
import scipy.misc
data = numpy.random.random_integers(0, 262143, (10000, 10000))
fileName = "array1.h5"
h5f = tables.openFile(fileName, "w")
array = h5f.createArray(h5f.root, "array1", data)
h5f.close()
fileName = "array1.h5"
h5f = tables.openFile(fileName, "r")
array_read = h5f.root.array1
print array_read[:]
#Method 1
scipy.misc.imsave('Test_random.png', array_read[:])
#Method 2
plt.imshow(array_read[:])
plt.show()
#Method 3
plt.pcolormesh(array_read[:])
plt.show()
它生成一个 10000x10000 的矩阵,并使用 h5py 将其保存在 H5 文件中。我关闭文件并重新打开它。然后我尝试保存图像或绘制数据(我注释掉了三种方法中的两种来测试每种方法)。
如果有人可以提供一些示例代码,允许我将存储在 H5 文件中的这个数组保存为 PNG 图像,我将不胜感激。