使用Matplotlib和GDAL在Python中可视化Tiff文件
TIFF文件格式用于存储光栅化的图像。一个名为GDAL(Geospatial Data Abstraction Library)的库专门用于读取这些光栅文件,以及其他文件格式,如矢量格式。gdal库是开源地理空间基金会的一部分。
要安装所需的模块,我们可以在终端中使用以下命令:
pip install gdal
!pip3 intall matplotlib
我们需要使用Python中的matplotlib和GDAL模块来显示TIFF图像。
方法:
- 步骤1: 导入模块
- 步骤2: 我们可以计算有多少个波段。
- 步骤3: 在TIFF文件中找到每个光栅波段。
- 步骤4: 将波段读取到NumPy数组中。
- 步骤5: 使用Matplotlib的imshow()函数进行显示。
为了解释本教程,我们将使用以下TIFF格式的图像:
逐步实现:
步骤1: 导入模块并打开文件。
from osgeo import gdal as GD
import matplotlib.pyplot as mplot
import numpy as npy
data_set = GD.Open(r'land_shallow_topo_2048.tif')
步骤2: 计算总乐队数量。
print(data_set.RasterCount)
输出:
3
步骤3: 获取波段
我们使用GDAL的GetRasterBand(int)方法来获取波段。需要注意的是,传入的值始终从1开始(波段的索引从1开始)。
# As, there are 3 bands, We will store in 3 different variables
band_1 = data_set.GetRasterBand(1) # red channel
band_2 = data_set.GetRasterBand(2) # green channel
band_3 = data_set.GetRasterBand(3) # blue channel
步骤4: 将波段读取为NumPy数组。
GDAL提供了ReadAsArray()方法,将这些波段转换为NumPy数组并返回数组。
b1 = band_1.ReadAsArray()
b2 = band_2.ReadAsArray()
b3 = band_3.ReadAsArray()
步骤5: 使用matplotlib的imshow()函数绘制数组。
为了绘制这三个数组,我们将按顺序堆叠它们。
img_1 = npy.dstack((b1, b2, b3))
f = mplot.figure()
plt.imshow(img_1)
mplot.savefig('Tiff.png')
mplot.show()
最终代码:
from osgeo import gdal as GD
import matplotlib.pyplot as mplot
import numpy as npy
data_set = GD.Open(r'land_shallow_topo_2048.tif')
print(data_set.RasterCount)
# As, there are 3 bands, we will store in 3 different variables
band_1 = data_set.GetRasterBand(1) # red channel
band_2 = data_set.GetRasterBand(2) # green channel
band_3 = data_set.GetRasterBand(3) # blue channel
b1 = band_1.ReadAsArray()
b2 = band_2.ReadAsArray()
b3 = band_3.ReadAsArray()
img_1 = npy.dstack((b1, b2, b3))
f = mplot.figure()
plt.imshow(img_1)
mplot.savefig('Tiff.png')
mplot.show()
最终输出:
结论
在本教程中,我们讨论了如何使用Python中的matplotlib和glad模块来可视化tiff文件格式的图像。