如何在Python(Matplotlib)中重叠两个图像、创建图例和保留CRS?

2024-09-27 07:32:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python来处理光栅数据(图像),现在遇到了一些问题。我希望有人能给我一些建议。你知道吗

我有一个RGB图像和一个灰度图像都有相同的线和行(像素),并有相同的坐标系(CRS)。 RGB ImageGrayscale Image

首先,我需要将灰度图像渲染为彩色图像并创建 彩色图像的自动图例。你知道吗

第二,我需要将两个图像重叠在一起,RGB在底部,灰度在顶部。如果两个图像可以与它们的CRS重叠,而我只是基于它们相同的行数和行数来重叠这两个图像,那就更好了。你知道吗

第三,我想用与原始图像相同的行和行以及CRS信息保存第二步的结果。你知道吗

我已经找到了一些方法来处理Matploblib中的第一步和第二步,如下代码所示,但是我认为我没有使用正确的方法,因为我在使用它时得到了两个警告。 虽然我可以得到第三步图像,但图像缺乏CRS和被重新采样。 The resulting image that I want

import numpy as np
import gdal
import matplotlib.pyplot as plt

dataset2 = gdal.Open('/Users/SPH_1_RGB.tif')
band_1 = dataset2.GetRasterBand(1).ReadAsArray()
band_2 = dataset2.GetRasterBand(2).ReadAsArray()
band_3 = dataset2.GetRasterBand(3).ReadAsArray()
array_RGB = np.dstack((band_1, band_2, band_3))
fig = plt.figure(1)
ax1 = fig.add_axes([0.0, 0.0, 0.89, 1.0])
ax1.imshow(array_RGB)
plt.xticks(())
plt.yticks(())

# [left, bottom, width, height]
ax2 = fig.add_axes([0.0, 0.0, 0.89, 1.0])
ax2.set_title('Chlorophyll_a')
dataset = gdal.Open('/Users/SPH_1_Grayscale.tif')
band = dataset.GetRasterBand(1)
array0 = band.ReadAsArray(0, 0, band.XSize, band.YSize)
array_Gray = np.ma.masked_where(array0 == 0.0, array0)
im = ax2.imshow(array_Gray, interpolation='nearest', cmap='jet')

cbaxes = fig.add_axes([0.9, 0.25, 0.02, 0.5])
cbar = plt.colorbar(im, orientation="vertical", cax=cbaxes)
plt.xticks(())
plt.yticks(())
plt.savefig('/Users/SPH_1_Overlap.jpg', dpi=300, bbox_inches='tight')

我得到两个警告:

  1. 使用与前一个轴相同的参数添加一个轴当前会重用前一个实例。在将来的版本中,将始终创建并返回一个新实例。同时,通过向每个轴实例传递唯一的标签,可以抑制此警告,并确保将来的行为。 “使用与先前轴相同的参数添加轴”
  2. 用户警告:请改用colorbar set_ticks()方法。 警告。警告(“请改用colorbar set \u ticks()方法。”)

我的问题是:

  1. 有没有更好的方法来完成这项工作,如何避免这两个警告?你知道吗
  2. 如何在Matplotlib中保存图像而不重新采样并保留CRS。你知道吗

Tags: 方法图像import警告bandnpfigplt

热门问题