如何调整大数组的大小并将其存储为灰度图像?

How to resize a large array and store it as a grayscale image?

首先,我可以提供一些背景信息。有一个大的 NDVI 数组,我想将它保存为 jpg 图像以设置 pydeck bitmap layer.

使用 rasterio 可视化的源数组如下所示:

import rasterio
fp = 'data/ndvi/index_ndvi.tif'
img = rasterio.open(fp)
show(img)

vals = img.read(1)
# normalize values
vals = ((vals - np.min(vals))/(np.max(vals) - np.min(vals)) * 255).astype('uint8')
vals.shape
>> (19204, 21063)

我尝试按如下方式调整数组大小:

from skimage.transform import resize
img_target_width = 1024
img_target_height = int((img_target_width/vals.shape[0]) * vals.shape[1]
img_resized = resize(np.expand_dims(vals, axis=0), (img_target_width, img_target_height)

但是上面的代码导致计算机死机。

如果有人提出一种可行的方法来调整大量值的大小并将其存储为图像,我将不胜感激。

使用 opencv 你可以高效地做到这一点。

import cv2
img_resized = cv2.resize(vals, (img_target_width, img_target_height))
cv2.imwrite('resized.jpg', img_resized) #save as jpg

>>> Original size: (13345, 17262)
>>> Resized size: (1324, 1024)
>>> Elapsed time: 3.97 seconds