首页 > 编程语言 >【Python&RS】基于GDAL遥感影像分幅裁剪(固定尺寸)

【Python&RS】基于GDAL遥感影像分幅裁剪(固定尺寸)

时间:2024-04-06 09:34:28浏览次数:33  
标签:RS Python frame 裁剪 分幅 geo ds GDAL left

        之前分享过一篇分幅裁剪的文章:【Python&RS】基于GDAL遥感影像分幅裁剪,只不过这篇文章当时编写的逻辑是自己输入需要裁剪多少行多少列,由于大家可能并没有直观地希望自己裁剪多少行列,所以非常局限。今天跟大家分享一下使用固定尺寸对遥感影像进行分幅裁剪,即每张裁剪的影像都是一样大的。

原创作者:RS迷途小书童

博客地址:https://blog.csdn.net/m0_56729804?type=blog

1. 代码逻辑

        逻辑其实很简单,就是利用输入的尺寸计算出需要裁剪多少行多少列。然后按照之前文章的方法进行裁剪即可。当然这里要注意一下边缘处的处理。

2. 代码主函数

        由于和之前发的文章原理差不多,所以我这里就不做过多的解释了,代码中都有详细的注释,如果大家有什么问题可以给我留言。

ds = gdal.Open(filepath)  
ds_width = ds.RasterXSize  
ds_height = ds.RasterYSize  
ds_bands = ds.RasterCount 
raw = int(ds_height / size) + 1
col = int(ds_width / size) + 1
for j in range(0, raw):
    print("正在裁剪第%s行......" % (j + 1))
    for k in range(0, col):
        raw_frame = size
        col_frame = size
        left_x = j * raw_frame
        left_y = k * col_frame
        raw_frame = min(ds_height-left_x, raw_frame)
        col_frame = min(ds_width-left_y, col_frame)
        driver = gdal.GetDriverByName('GTiff')
        ds_result = driver.Create(out_path+"%s_%s.tif" % (j+1, k+1), col_frame, raw_frame,
                                  bands=ds_bands, eType=gdal.GDT_Byte)
        ds_geo = ds.GetGeoTransform()
        top_left_x = ds_geo[0] 
        top_left_y = ds_geo[3]  
        top_left_x = top_left_x + left_y * ds_geo[1]
        top_left_y = top_left_y + left_x * ds_geo[5]
        ds_geo = (top_left_x, ds_geo[1], ds_geo[2], top_left_y, ds_geo[4], ds_geo[5])
        ds_result.SetGeoTransform(ds_geo)
        ds_result.SetProjection(ds.GetProjection())
        array_band = []
        for i in range(1, ds_bands+1):
            array_band = ds.GetRasterBand(i).ReadAsArray(left_y, left_x, col_frame, raw_frame).astype(np.float64)
            # 根据左上角的像素坐标和幅宽读取指定区域内的数据
            ds_result.GetRasterBand(i).SetNoDataValue(0)  # 将无效值设为0
            ds_result.GetRasterBand(i).WriteArray(array_band)  # 将每个波段写入新的文件中
        ds_result = None
        del ds_result

3. 总结

        今天主要分享的是遥感影像的分幅裁剪,大家可以用这段代码减少数据量,也可以用它制作样本集。同时结合之前发的那篇分幅裁剪的文章,基本上概括了所有的分幅裁剪的情况,友友们也可以根据自己的需求修改一下代码。如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!

标签:RS,Python,frame,裁剪,分幅,geo,ds,GDAL,left
From: https://www.cnblogs.com/RSran/p/18117161

相关文章

  • 华为OD机试 - 猴子爬山(Java & JS & Python & C & C++)
    须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输入描述输出描述用例解题思路:Java代码:JS代码:Python代码:C代码:C++代码:题目描述一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台......
  • 华为OD机试 - 火星文计算(Java & JS & Python & C & C++)
    须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输入描述输出描述用例解题思路:Java代码:JS代码:Python代码:C代码:C++代码:题目描述已知火星人使用的运算符为#、$,其与地球人的等价公式如下......
  • Python中的iif语句这样用(使用三元表达式替代if-else语句)
    #使用三元表达式替代if-else语句scope=n.name.startswith("'")and'工作表'or'工作簿'#ifn.name.startswith("'"):#scope='工作表'#else:#scope='......
  • Jarbars——Cron定时任务提权
    #简述本文借助Vulnhub靶机——Jarbars来学习Cron定时任务提权方式。、关于cron定时任务提权:在Linux中crontab是一个用于管理定时任务的命令行工具,它允许用户创建、编辑、查看和删除定时任务,以便在指定的时间间隔或特定的时间点自动执行命令或脚本。/etc/crontab文件用于管......
  • 1.4Python环境安装
    1、安装包的下载进入Python官网:WelcometoPython.org以win系统64位为例,下载安装包:Python3.12.2下载完成准备安装:2、安装步骤2-1、如下图勾选:安装时使用管理员权限,添加python的环境变量        并选择自定义安装2-2、点击【Next】2-3、选择文件路径,使用......
  • Python面试必备一之迭代器、生成器、浅拷贝、深拷贝
    本文首发于公众号:Hunter后端原文链接:Python面试必备一之迭代器、生成器、浅拷贝、深拷贝这一篇笔记主要介绍Python面试过程中常被问到的一些问题,比如:Python中的迭代器和生成器是什么,有什么作用Python中不可变类型有哪些在Python函数中,传递参数传递的是什么,值还是引......
  • 部署python网站
    如何部署python的代码既然是运维,运维,部署,维护一个完整的产品、前端开发工程师(前端代码html,css,js)+后端工程师(编写和数据库交互的逻辑代码)前端、后端源码,打包,发给运维,部署到linux服务器上1.如果是web产品,需要运维,部署如nginx这样的web服务器,提供域名,端口,防火墙,等允许......
  • Windows&PowerShell安装配置Vim的折腾记录
    说明vim一直以来都被称为编辑器之神一样的存在。但用不用vim完全取决于你自己,但是作为一个学计算机的同学来说,免不了会和Linux打交道,而大部分的Linux操作系统都预装了vim作为编辑器,如果是简单的任务,其实vim只要会:wq,i,o,w,q!,kjhl足矣。正式开始下面的内容之前,你可以考......
  • python的时间格式化
    datetimedatetime.date属性/方法功能说明.max日期最大值类属性.min日期最小值类属性.today()今天的日期类方法.year对象的年属性int类型.month对象的月属性int类型.day对象的天属性int类型.weekday对象的星期属性周一~周日(0~6)......
  • Python if、for、while
    一、第一个程序 交互式输入第一个程序 #!/usr/bin/envpython3#-*-coding:utf-8-*-#@Author:Tom#@Time:2024/4/522:25#定义变量Google_Mail="[email protected]"#允许交互式输入并赋值给对应的变量Google_Url=input("PleaseInputGoogleTheUr......