tif数据的读取 彩色 近红外图像显示 通道拆分与合并 python 详细注释笔记
TIF图片的读取
鉴于TIF图片很多是卫星拍摄的16位图像,很多图片不能直接读取,必须将其先进行数据的8位格式转换,然后再进行通道的拆分和合并,才能进行图像的读取,否则图像打开后会显示全黑或者全白
一、使用的Python库
- skimage
- numpy
- opencv
- matplotlib(可以直接查看矩阵)
from skimage import io
import cv2
import matplotlib.pyplot as plt
import numpy as np
二、函数代码
def read_tif( imgpath ):
img = io.imread(imgpath)#读取图片 imgpath为图片所在位置
img = img/img.max()
img =img*255-0.001#减去0.001防止变成负整型
img =img.astype(np.uint8)
print(img.shape)#显示图片大小和通道数 通道数为4
b = img[:, :, 0]#蓝通道
g = img[:, :, 1]#绿通道
r = img[:, :, 2]#红通道
nir = img[:, :, 3]#近红外通道,不可以用imshow直接查看
#通道拼接 两种方法
bgr = cv2.merge([b, g, r])
rgb= np.dstack([r,g,b])
#imshow()必须有图片的名字且像素最大值255,否则会报错
cv2.imshow('bgr', bgr)
plt.matshow(rgb)#matplotlib的matshow()可以直接看矩阵而不用进行位数转换
cv2.imshow('近红外灰度图',nir)#必须有图片的名字且像素最大值255,否则会报错
#两种方法接口不一样,imshow为bgr输入 matshow为rgb输入
cv2.imwrite("C:/Users/Administrator/Desktop/1.jpg", img)#保存图片
cv2.waitKey(0)#窗口等待响应
cv2.destroyAllWindows()#消除窗口