当前位置: 首页 > news >正文

tif文件转png、Excel

l利用gdal读取tif中的地理信息和波段数组,然后保存想要的格式即可。

from osgeo import gdal
from PIL import Image
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt# 读取.tif文件
def read_tif(file_path):dataset = gdal.Open(file_path)# GetMetadata():获取tif文件的元数据,返回一个字典。metadata = dataset.GetMetadata()# GetProjection():获取tif文件的投影信息,返回一个字符串。projection = dataset.GetProjection()# GetGeoTransform():获取tif文件的地理变换信息,返回一个元组。geoTransform = dataset.GetGeoTransform()# RasterCount:获取tif文件的波段数,返回一个整数。rasterCount = dataset.RasterCount# RasterXSize:获取tif文件的列数,返回一个整数。rasterXSize = dataset.RasterXSize# RasterYSize:获取tif文件的行数,返回一个整数。rasterYSize = dataset.RasterYSize# GetRasterBand(i):获取tif文件的第i个波段,返回一个波段对象。rasterBandArray = []for i in range(rasterCount):rasterBand = dataset.GetRasterBand(i + 1)rasterBandArray.append(rasterBand)# ReadAsArray():将tif文件的数据读取为一个numpy数组,返回一个数组。array = dataset.ReadAsArray()# # 打印元数据print("元数据:{}".format(metadata))# # 打印投影信息# print("投影信息:{}".format(projection))# # 打印地理变换信息print("地理变换信息:{}".format(geoTransform))# # 打印波段数# print("波段数:{}".format(rasterCount))# # 打印列数# print("列数:{}".format(rasterXSize))# # 打印行数# print("行数:{}".format(rasterYSize))# # 打印波段对象# for i in range(rasterCount):#     print("第{}个波段:{}".format(i + 1, rasterBandArray[i]))# # 打印数据数组# print("数据数组:{}".format(array))return array, geoTransform# 保存数组为.tif文件
def save_tif(output_path, array, geotransform):driver = gdal.GetDriverByName('GTiff')rows, cols, channel = array.shapeoutput_dataset = driver.Create(output_path, cols, rows,channel, gdal.GDT_Float32)# 添加地理信息,坐标output_dataset.SetGeoTransform(geotransform)# output_dataset.GetRasterBand(1).WriteArray(array[:, :, 0])# output_dataset.GetRasterBand(2).WriteArray(array[:, :, 1])# output_dataset.GetRasterBand(3).WriteArray(array[:, :, 2])# 添加波段信息,即图片,有几个channel添加几个波段for c in range(channel):output_dataset.GetRasterBand(c + 1).WriteArray(array[:, :, c])output_dataset.FlushCache()output_dataset = None# 读取.png文件
def read_png(file_path):img1 = cv.imread(file_path)  # BGRimg2 = plt.imread(file_path)  # RGBimg3 = np.array(Image.open(file_path))  # RGB# 以灰度图方式读取 plt没法以灰度方式读取,可以在imshow的时候以灰度方式显示plt.imshow(a, cmap='viridis', interpolation='nearest')img4 = cv.imread(file_path, flags=cv.IMREAD_GRAYSCALE)# img5 = plt.imread(file_path)img6 = np.array(Image.open(file_path).convert("L"))# 返回 H×W×Creturn img3# 将坐标数据结合,并保存为.tif文件
def combine_and_save_tif(tif_path, png_path, output_path):tif_array, geotransform = read_tif(tif_path)png_array = read_png(png_path)# 保存为.tif文件# 只需要添加地理信息即可save_tif(output_path, png_array, geotransform)if __name__ == '__main__':# 示例使用tif_path = 'searchareaxia432.tif'png_path = 'label.png'output_path = 'output.tif'combine_and_save_tif(tif_path, png_path, output_path)print('done...')

http://www.lryc.cn/news/254437.html

相关文章:

  • 【PyTorch】训练过程可视化
  • 深入理解Go语言GC机制
  • qt-C++笔记之组件-分组框QGroupBox
  • qt 定时器用法
  • 用23种设计模式打造一个cocos creator的游戏框架----(九)访问者模式
  • 根文件系统初步测试
  • 【精选】设计模式——策略设计模式-两种举例说明,具体代码实现
  • 外包干了3个月,技术倒退2年。。。
  • 微信小程序:chooseimage从本地相册选择图片或使用相机拍照
  • 「Swift」取消UITableView起始位置在状态栏下方开始
  • android高版本适配使用Tools.java
  • 面试官:说说webpack中常见的Loader?解决了什么问题?
  • 【蓝桥杯省赛真题50】Scratch智能计价器 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • 折半查找(数据结构实训)
  • AR助推制造业智能转型:实时远程协作与可视化引领生产创新
  • 【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)
  • sed 流式编辑器
  • Linux shell编程学习笔记33:type 命令
  • 【数据结构】—红黑树(C++实现)
  • 内衣洗衣机和手洗哪个干净?高性价比内衣洗衣机推荐
  • TikTok与互动广告:品牌如何打破传统界限
  • 跟着Nature Communications学习Hisat-Trinity-PASA等分析流程
  • Unity中Batching优化的动态合批
  • 2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序
  • 【Linux】静态库与动态库制作及运行原理
  • 工具站推荐
  • 【JS】toFixed()无法精准保留小数的解决方案
  • vue3版本学习
  • 【WPF.NET开发】创建简单WPF应用
  • 视频智能分析国标GB28181云平台EasyCVR加密机授权异常是什么原因?