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

编程入门 行业动态 更新时间:2024-10-27 14:29:53

使用Python读取多<a href=https://www.elefans.com/category/jswz/34/1769997.html style=通道tif格式图片"/>

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

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

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

更多推荐

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

本文发布于:2023-07-28 15:43:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1239048.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:通道   格式   图片   Python   tif

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!