使用Python读取多通道tif格式图片

使用Python读取多通道tif格式图片

Python如何读取单通道或者三通道图片想必大家都会了, 使用cv2.imread或者PIL当中的Image.open这两种方法, 都是可以的, 其中函数的参数和使用注意事项别的博客也有提到, 这里不再赘述.
这里要讲的是如何读取多通道(比如四通道, 五通道, 六通道, 七通道等)的tif格式的图片, 这类图片通常在地理信息软件当中合成(如ENVI), 并且存在超过3个的通道数量,通常这类图像用一般的看图软件也无法打开.
于是就要用到gdal这个包, 具体而言代码如下(假设我们的多通道图片为7bands.tif):
7bands.tif
那么读取这张图片的代码为:

from osgeo import gdal
data  = gdal.Open('7bands.tif')

用下面的代码显示通道数量:

num_bands = data.RasterCount
print(num_bands)

将多通道的图片数据变成numpy当中多维数组的形式:

tmp_img = data.ReadAsArray()

接下来需要使用到各个通道的数据时就方便多了, 但需要注意的是, 上面tmp_imgshape是(通道数, 长, 宽)和传统图像多维数组的shape (长, 宽, 通道数)是不一样的, 因此需要进行一次transpose变成传统的图像形状格式:

img = tmp_img.transpose(2, 0, 1) 

比如这张7bands.tif前3个通道是RGB, 我们就能用下面的代码取出这三个通道的数据:

img_rgb = img[:,:,0:3]

当然, 还需要注意的是数组中数据的dtype, 一般而言读出来是np.float, 直接使用可能会出现一些异常的结果. 我们需要将其转化为np.uint8, 作为传统图像数组当中的dtype:

import numpy as np
img_rgb = np.array(img_rgb, dtype = np.uint8)
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值