编程_不使用gdal读取tif文件

读取tif文件

正常来说,读取tif文件,使用gdal库就能解决了。

gdal库在遥感行业过于强大、简单、易用,以至于很多商业软件的底层也调用了gdal。

平常在python环境下使用gdal库对tif文件进行读写是很简单的,大佬们都把函数、接口封装得很好,咱们直接调用对应的API就OK了。

常用的语句如下:

from osgeo import gdal   # 导入gdal
tif_file = r'xxx.tif'    # 待读取的tif文件
ds = gdal.Open(tif_file) # 调用gdal的接口,ds是gdal的对象
array = ds.ReadAsArray() # 这个对象中有ReadAsArray方法

以上四句语句,把tif_file全部读取在内存里。

不使用gdal读取tif文件

为什么会有这个奇怪的需求呢?

因为…

我有个朋友,他在linux因为没有linux的权限,安装不了 gdal。

这个朋友肯定不是我。

image-20231208163903324

所以只能通过其他方法,把tif文件读取到内存里。

搜索一番,发现有2种方法可以成功实现这个需求。另外第2种方法只能实现部分需求。

  1. skimage = good
  2. tifffile = good
  3. opencv = no good

skimage

简单例子如下:

from skimage import io
tif_file = r'xxx.tif'    # 待读取的tif文件
img = io.imread(tif_file)

image-20231208164731482

从上图可以知道,这张TIF影像的长宽为6908x7300,有4个波段。

这种方法只能读取数值,不能读取坐标信息。但是对我而言是足够了,暂时能满足要求。

tifffile

简单例子如下:

import tifffile as tiff
tif_file = r'xxx.tif'    # 待读取的tif文件
img = tiff.imread(tif_file)

image-20231208170318422

显然,这张TIF影像的长宽为6908x7300,有4个波段。

tifffile库也是只能读取数值,不能读取坐标信息。

opencv

简单例子如下:

import cv2
tif_file = r'xxx.tif'    # 待读取的tif文件
img = cv2.imread(tif_file)

image-20231208170428948

显然,opencv不能打开tif文件。

小结

综上,对比其他的读取tif的方法,gdal显得格外强大,学地信遥感的人,特别是遥感er,是避不开gdal的。