将数组合并为栅格 (jpeg)
Combine arrays to raster (jpeg)
我整天都在尝试将三个 ndarrays 组合成一张 jpeg 图片。我使用 gdal 库提取了三个波段。导出的值在数组中,如下所示:
[[ 6355. 6586. 6646. ..., 704. 671. 725.]
[ 5853. 6031. 6107. ..., 782. 813. 897.]
[ 4632. 4748. 4305. ..., 837. 869. 802.]
...,
[ 1032. 1090. 1018. ..., 1500. 1441. 1387.]
[ 958. 980. 913. ..., 1522. 1455. 1391.]
[ 883. 932. 966. ..., 1489. 1369. 1378.]]
这是从 pix 文件中提取的一个波段。我有三个乐队。我在这里尝试组合这些频段:
rgbArray = np.zeros((rows,cols,3), dtype=np.uint8)
band1 = dataset.GetRasterBand(closest_channel(dict_channel, 640)-1)
band2 = dataset.GetRasterBand(closest_channel(dict_channel, 550)-1)
band3 = dataset.GetRasterBand(closest_channel(dict_channel, 460)-1)
data1 = band1.ReadAsArray (0, 0, cols, rows).astype(np.float)
data2 = band2.ReadAsArray (0, 0, cols, rows).astype(np.float)
data3 = band3.ReadAsArray (0, 0, cols, rows).astype(np.float)
rgbArray[..., 0] = data1
rgbArray[..., 1] = data2
rgbArray[..., 2] = data3
img = Image.fromarray(rgbArray, 'RGB')
图片是这样的:
当然不是好结果。应该是野外的地面应该是飞机拍照。
如果有任何帮助,我将非常高兴
非常感谢
根据您的数据域,您将其缩放到 [0, 255] 范围内。
一种天真的方法是考虑数据的范围,即信号的最大范围,例如
[...]
data1 = band1.ReadAsArray (0, 0, cols, rows).astype(np.float)
[...]
# Normalize data range
max1 = np.nanmax(data1)
min1 = np.nanmax(data1)
data1 = ((data1 - min1)/(max1 - min1)) * 255
[...]
rgbArray[..., 0] = data1.astype(int)
我整天都在尝试将三个 ndarrays 组合成一张 jpeg 图片。我使用 gdal 库提取了三个波段。导出的值在数组中,如下所示:
[[ 6355. 6586. 6646. ..., 704. 671. 725.]
[ 5853. 6031. 6107. ..., 782. 813. 897.]
[ 4632. 4748. 4305. ..., 837. 869. 802.]
...,
[ 1032. 1090. 1018. ..., 1500. 1441. 1387.]
[ 958. 980. 913. ..., 1522. 1455. 1391.]
[ 883. 932. 966. ..., 1489. 1369. 1378.]]
这是从 pix 文件中提取的一个波段。我有三个乐队。我在这里尝试组合这些频段:
rgbArray = np.zeros((rows,cols,3), dtype=np.uint8)
band1 = dataset.GetRasterBand(closest_channel(dict_channel, 640)-1)
band2 = dataset.GetRasterBand(closest_channel(dict_channel, 550)-1)
band3 = dataset.GetRasterBand(closest_channel(dict_channel, 460)-1)
data1 = band1.ReadAsArray (0, 0, cols, rows).astype(np.float)
data2 = band2.ReadAsArray (0, 0, cols, rows).astype(np.float)
data3 = band3.ReadAsArray (0, 0, cols, rows).astype(np.float)
rgbArray[..., 0] = data1
rgbArray[..., 1] = data2
rgbArray[..., 2] = data3
img = Image.fromarray(rgbArray, 'RGB')
图片是这样的:
当然不是好结果。应该是野外的地面应该是飞机拍照。
如果有任何帮助,我将非常高兴 非常感谢
根据您的数据域,您将其缩放到 [0, 255] 范围内。
一种天真的方法是考虑数据的范围,即信号的最大范围,例如
[...]
data1 = band1.ReadAsArray (0, 0, cols, rows).astype(np.float)
[...]
# Normalize data range
max1 = np.nanmax(data1)
min1 = np.nanmax(data1)
data1 = ((data1 - min1)/(max1 - min1)) * 255
[...]
rgbArray[..., 0] = data1.astype(int)