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...')
相关文章:
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_…...
【PyTorch】训练过程可视化
文章目录 1. 训练过程中的可视化1.1. alive_progress1.2. rich.progress 2. 训练结束后的可视化2.1. tensorboardX2.1.1. 安装2.1.2. 使用 1. 训练过程中的可视化 主要是监控训练的进度。 1.1. alive_progress 安装 pip install alive_progress使用 from alive_progress i…...
深入理解Go语言GC机制
1、Go 1.3之前的标记-清除(mark and sweep)算法 Go 1.3之前的时候主要用的是普通的标记-清除算法,此算法主要由两个主要的步骤: 标记(Mark phase)清除(Sweep phase) 1)…...
qt-C++笔记之组件-分组框QGroupBox
qt-C笔记之组件-分组框QGroupBox code review! 文章目录 qt-C笔记之组件-分组框QGroupBox1.《Qt 6 C开发指南》p752.《Qt 官方文档》3.《Qt 5.12实战》——5.9 分组框控件 1.《Qt 6 C开发指南》p75 2.《Qt 官方文档》 中间段落翻译: 我把示例补充完整: …...
qt 定时器用法
在qt开发中,定时器是我们经常用到的。我们接下来说一下定时器的三种用法,需要注意的是定时器事件是在主线程中触发的,因此在处理耗时操作时应特别小心,以避免阻塞应用程序的事件循环。 1. 三种定时器使用 1.1 QObject的定时器 …...
用23种设计模式打造一个cocos creator的游戏框架----(九)访问者模式
1、模式标准 模式名称:访问者模式 模式分类:行为型 模式意图:将数据操作与数据结构分离,使得在不修改数据结构的前提下,可以添加或改变对数据的操作。 结构图: 适用于: 当你需要对一个复杂对…...
根文件系统初步测试
一. 简介 上一篇文章学习了向所编译生成的根文件系统中加入 lib库文件。文章地址如下: 根文件系统lib库添加与初步测试-CSDN博客 本文继上一篇文章的学习,本文对之前制作的根文件系统进行一次初步测试。 二. 根文件系统初步测试 为了方便测试&#…...
【精选】设计模式——策略设计模式-两种举例说明,具体代码实现
Java策略设计模式 简介 策略设计模式是一种行为型设计模式,它允许在运行时选择算法的行为。 在软件开发中,我们常常需要根据不同情况采取不同的行为。通常的做法是使用大量的条件语句来实现这种灵活性,但这会导致代码变得复杂、难以维护和扩…...
外包干了3个月,技术倒退2年。。。
先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
微信小程序:chooseimage从本地相册选择图片或使用相机拍照
文档 https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html 代码示例 const res await uni.chooseImage({count: 1, //默认9sizeType: [original, compressed], //可以…...
「Swift」取消UITableView起始位置在状态栏下方开始
前言:在写页面UI时发现,当隐藏了NavigationBar时,即使UITableView是从(0,0)进行布局,也会一直在手机状态栏下方进行展示布局,而我的想法是希望UITableView可以从状态栏处就进行展示布局 当前页面展示: 问题…...
android高版本适配使用Tools.java
随着android版本的提升,原生Tools不公开并且不能被正常使用,为了延续项目的功能,修改如下: /** Copyright (C) 2006 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License&quo…...
面试官:说说webpack中常见的Loader?解决了什么问题?
面试官:说说webpack中常见的Loader?解决了什么问题? 一、是什么 loader 用于对模块的"源代码"进行转换,在 import 或"加载"模块时预处理文件 webpack做的事情,仅仅是分析出各种模块的依赖关系&a…...
【蓝桥杯省赛真题50】Scratch智能计价器 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
目录 scratch智能计价器 一、题目要求 编程实现 二、案例分析 1、角色分析...
折半查找(数据结构实训)
题目: 标准输入输出 题目描述: 实现折半查找。要求查找给定的值在数据表中相应的存储位置。本题目假定输入元素均按非降序输入。 输入: 输入包含若干个测试用例,第一行为测试用例个数k。每个测试用例占3行,其中第一行为…...
AR助推制造业智能转型:实时远程协作与可视化引领生产创新
制造商面临着多方面的变革,技术的兴起催生了工业物联网(IIoT),改变了现代工厂的外貌、系统和流程。同时,全球竞争压力和不断变化的员工队伍要求采用新的员工培训方法,并重新审视工人在工厂中的角色。尽管如…...
【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇3(附项目源码)
文章目录 本节最终效果前言素材人物移动音效枪口火焰和开火音效枪口灯光弹孔和火花添加武器随镜头手臂摇摆效果源码完结 本节最终效果 前言 本节主要实现添加音效,和一些特效、武器摆动调整。 素材 素材,为了方便我直接用了unity免费的音效输出&#…...
sed 流式编辑器
使用方式: 1,前置指令 | sed 选项 定址符指令 2,sed 选项 定址符指令 被处理文档 选项: -n 屏蔽默认输出 -i写入文件 -r支持扩展正则 指令: p输出 d删除 s替换 sed -n 1p user //输出第1行 sed -n…...
Linux shell编程学习笔记33:type 命令
目录 0 引言1 type 命令的功能和格式 1.1 type命令的功能1.2 type 命令的格式2 type命令用法实例 2.1用type命令查看shell内置命令(以echo命令为例)2.2 用type命令查看别名(以ls命令为例)2.3 用type命令同时查看shell内置命令和别…...
【数据结构】—红黑树(C++实现)
🎬慕斯主页:修仙—别有洞天 💜本文前置知识: AVL树 ♈️今日夜电波:Letter Song—ヲタみん 1:36━━━━━━️💟──────── 5:35 …...
【VScode】STM32CubeMX+VScode开发编译下载STM32程序(基于Cmake工程)
【VScode】STM32CubeMXVScode开发STM32程序(基于Cmake工程) 文章目录准备工作安装上述软件(略)为VScode配置隔离开发环境-cubeMX为新环境安装插件1. 安装STM32CubelIDE for Visual Studiio Code插件2. 安装Cortex-Debug插件3. 安装…...
B站视频转文字终极指南:5分钟掌握高效知识管理神器
B站视频转文字终极指南:5分钟掌握高效知识管理神器 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾为了一段精彩的B站课程内容࿰…...
WandEnhancer:彻底解锁WeMod专业版功能的终极解决方案
WandEnhancer:彻底解锁WeMod专业版功能的终极解决方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod免费版的种种限制而烦恼吗…...
企业自建内部知识库,最容易死在这8个问题上(管理+技术双维度)
很多企业想做内部知识库:把经验、图纸、方案、流程、故障案例沉淀下来,避免人员流失就丢技术、避免重复踩坑。但真正落地后,90%都变成了“僵尸文档库”——要么没人用、没人更,要么技术层面跟不上需求,AI模式形同虚设。…...
CodeWF Toolbox:一个用 Avalonia + Prism 做出来的开发者工具箱
今天这篇文章,站长来聊聊我自己开发的 CodeWF Toolbox,CodeWF 工具箱。熟悉我的朋友一般都叫我“站长”,因为我还有一个网站:CodeWF。这个工具箱也是围绕我平时写代码、维护网站、整理资料、排查问题时反复遇到的需求做出来的。它…...
4 款主流论文降 AI 软件实测对比!谁能 5 分钟把 AI 率降到 10% 以下
4 款主流论文降 AI 软件实测对比!谁能 5 分钟把 AI 率降到 10% 以下 毕业季最焦虑的事——答辩前剩 3 天、AI 率还有 70%、想找一款 5 分钟就能搞定的工具。 市面上很多工具宣称"几分钟出结果"——但实测下来快的快、慢的慢、效果差距更大。这篇文章实测对…...
RDMA网络调试实战:当你的应用卡顿时,如何定位是哪种Error导致了重传?
RDMA网络性能调优实战:从重传Error定位到精准修复 RDMA(Remote Direct Memory Access)技术凭借其超低延迟和高吞吐量的特性,已经成为高性能计算、分布式存储和金融交易系统的核心网络架构。但在实际生产环境中,即使是经…...
简历投了全石沉大海?实测3个免费AI简历神器,HR秒通过、面试翻3倍!
3个实测免费的AI简历神器,不用花钱、不用登录,直接让简历过ATS、获面试,应届生/职场人闭眼冲!简历优化本身就讲究精准度,尤其是ATS筛选逻辑,很多工具要么收费高,要么改完还是不贴合JD࿰…...
解锁CLIP潜力:三种高效微调策略实战解析
1. CLIP模型微调的必要性 CLIP作为多模态模型的里程碑之作,其zero-shot能力确实令人惊艳。但真实业务场景中,我们常常遇到这样的困境:电商平台需要区分"奶白色"和"米白色"的家具面料,医疗影像需要识别特定病灶…...
【免费下载】 车牌识别字符库
车牌识别字符库 【下载地址】车牌识别字符库 本仓库提供了一个车牌识别字符库,该字符库已经过预处理,将车牌上的字符进行了切割和分割,每个字符均为单独的图像文件。字符图像的大小统一为20x20像素,涵盖了车牌上常见的省份简写、数…...
