读取TIFF图像并转为JPG/PNG图像的方法

深度学习课遥感图像处理查看图像结果用,本文需要的库为CV2和gdal。

from osgeo import gdal
import cv2
import numpy as np
import matplotlib.image as imgplt
import matplotlib.pyplot as plt
np.seterr(divide='ignore', invalid='ignore')


def create_preview(dataset, target_path, red=0, green=1, blue=2):
	"""
	生成遥感影像的预览图
	:param dataset: 影像数据
	:param red: 预览图红色采用影像的波段索引
	:param green: 预览图绿色采用影像的波段索引
	:param blue: 预览图蓝色采用影像的波段索引
	:param target_path: 预览图存储地址
	:return:
	"""
	band_count = dataset.RasterCount
	cols = dataset.RasterXSize  # 列数
	rows = dataset.RasterYSize  # 行数
	im_data = dataset.ReadAsArray(0, 0, cols, rows)
	# 多波段影像根据红绿蓝索引合成图片
	if band_count >= 3:
		band_red = im_data[red]
		data_red = translate(band_red, cols, rows)
		band_green = im_data[green]
		data_green = translate(band_green, cols, rows)
		band_blue = im_data[blue]
		data_blue = translate(band_blue, cols, rows)
		
		x = np.zeros([rows, cols, 3], dtype=np.uint8)
		for row_index in range(rows):
			for col_index in range(cols):
				x[row_index][col_index][0] = data_red[row_index][col_index]
				x[row_index][col_index][1] = data_green[row_index][col_index]
				x[row_index][col_index][2] = data_blue[row_index][col_index]
		cv2.imwrite(target_path, x)
	# 单波段影像直接合成灰度
	else:
		# band = dataset.GetRasterBand(1)
		band = dataset.ReadAsArray(0, 0, cols, rows)
		cv2.imwrite(target_path, translate(band, cols, rows))


def translate(band, cols, rows):
	"""将一个波段的值转到0-255的区间"""
	# band_data = band.ReadAsArray(0, 0, cols, rows)
	min = np.min(band)
	max = np.max(band)
	# 以下两行代码band_data处理结果都可以用,一种是将图像rgb值限制在255以下,一种是限制在0到255之间
	# band_data = band / max * 255  
	band_data = (band - min) * 255 / (max - min)
	return band_data.astype(np.uint8)


# 多波段影像
# 读取TIFF图像的路径
dataset = gdal.Open("E:/python_code/deep_learning/PSGAN-code/results/test999/test_fused_images_v1.tif")
# 生成png图像的保存路径
target_path = "E:/python_code/deep_learning/PSGAN-code/results/test999/test_fused_images_v1.png"

create_preview(dataset, target_path)

pic = imgplt.imread(target_path)
plt.imshow(pic)
plt.show()

改变translate函数中两行程序分别生成图像结果如下:
band_data = (band - min) * 255 / (max - min)
在这里插入图片描述
band_data = band / max * 255
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值