高解像度の画像を取得して大きな行列として保存するカメラがあります。データから画像を構築しようとしています。(そして、Python-32 ビットで実行する必要があります。)
データは HDF5 に保存され、h5py を使用してアクセスしていますが、私が知っているすべての方法ではすべてのデータをコンピューターのメモリにダンプする必要があるため、メモリ エラーなしでデータをプロットすることはできません。(私は通常の matplotlib と scipy ライブラリしか知りません。)
また、データから画像を生成しようとすると同じ問題が発生しますが、以前の質問 ( Constructing high resolution images in Python )で GDAL がデータから画像を生成できると言われました。
私はいくつかの調査を行いました(PythonのGDALはあまり文書化されていないようです)、この質問に出くわしました:画像全体をロードせずに画像内のピクセルをループできますか? . 提供された回答は、画像を行ごとにインポートする簡単なスクリプトを提供します。これの反対を行い、画像を行ごとに保存する方法はありますか? そうすれば、画像を保存するためにすべてのデータをメモリにロードする必要がなくなります。
または、大きすぎてメモリにロードできない 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 ファイルに保存します。ファイルを閉じて、もう一度開きます。次に、画像を保存するか、データをプロットしようとします (3 つの方法のうち 2 つをコメントアウトして、それぞれをテストします)。
H5ファイルに保存されたこの配列をPNG画像に保存できるサンプルコードを誰かが提供できれば、非常にありがたいです。