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()#消除窗口