非常に大きな画像がいくつかあります。イメージ全体をメモリにロードするのではなく、イメージを行順に 1 回だけパスしたいだけです。Python/scipyでこれを行うことは可能ですか?
編集:私は.PNGを使用していますが、それらをPPM、BMP、またはその他のロスレスに変換できました。
非常に大きな画像がいくつかあります。イメージ全体をメモリにロードするのではなく、イメージを行順に 1 回だけパスしたいだけです。Python/scipyでこれを行うことは可能ですか?
編集:私は.PNGを使用していますが、それらをPPM、BMP、またはその他のロスレスに変換できました。
GDAL (Python バインディングを使用) は、このための非常に優れたドライバーを提供します。地理空間パッケージですが、たとえば BMP や PNG で問題なく動作します。この例は、行ごとに PNG をロードする方法を示しています。
import gdal
# only loads the dataset
ds = gdal.Open('D:\\my_large_image.png')
# read 1 row at the time
for row in range(ds.RasterYSize):
row_data = ds.ReadAsArray(0,row,ds.RasterXSize,1)
ds = None # this closes the file
結果として Numpy 配列が得られるので、処理の準備が整います。同様の方法で任意の結果を書くことができます。
print type(row_data)
<type 'numpy.ndarray'>
print row_data.shape
(3, 1, 763)
print row_data
[[[ 0 0 255 ..., 230 230 0]]
[[ 0 0 252 ..., 232 233 0]]
[[ 0 0 252 ..., 232 233 0]]]
読み取り専用のパッケージをインストールするのは、PIL などで実行できる場合は少しやり過ぎかもしれません。しかし、その堅牢なオプションです。私はこのような 30000*30000 ピクセルの画像を処理しました。