1、GDAL进行图像一块区域的裁剪和大图像裁剪为多个小图像

本文介绍了一种将大型遥感影像切割成多个较小图像的方法,包括保持地理坐标信息的切割方式及忽略坐标信息的裁剪技术。通过Python编程实现,使用GDAL库处理图像,并提供完整的代码示例。

1 代码实现(一小块儿区域裁剪)

# 将一幅遥感影像拆建为多张
import gdal

# 读取要切的原图
in_ds = gdal.Open("zx1.jpg")
print("open tif file succeed")
width = in_ds.RasterXSize  # 获取数据宽度
height = in_ds.RasterYSize  # 获取数据高度
outbandsize = in_ds.RasterCount  # 获取数据波段数
im_geotrans = in_ds.GetGeoTransform()  # 获取仿射矩阵信息
im_proj = in_ds.GetProjection()  # 获取投影信息
datatype = in_ds.GetRasterBand(1).DataType
im_data = in_ds.ReadAsArray()  # 获取数据

# 读取原图中的每个波段
in_band1 = in_ds.GetRasterBand(1)
in_band2 = in_ds.GetRasterBand(2)
in_band3 = in_ds.GetRasterBand(3)

# 定义切图的起始点坐标
offset_x = 0
offset_y = 0

# offset_x = width/2  # 这里是随便选取的,可根据自己的实际需要设置
# offset_y = height/2

# 定义切图的大小(矩形框)
block_xsize = 60  # 行
block_ysize = 60  # 列

k = 0
for i in range(width // block_xsize):
    for j in range(height // block_xsize):
        out_band1 = in_band1.ReadAsArray(i * block_xsize, j * block_xsize, block_xsize, block_ysize)
        out_band2 = in_band2.ReadAsArray(i * block_xsize, j * block_xsize, block_xsize, block_ysize)
        out_band3 = in_band3.ReadAsArray(i * block_xsize, j * block_xsize, block_xsize, block_ysize)
        print(out_band3)
        k += 1

        ## 从每个波段中切需要的矩形框内的数据(注意读取的矩形框不能超过原图大小)
        # out_band1 = in_band1.ReadAsArray(offset_x, offset_y, block_xsize, block_ysize)
        # out_band2 = in_band2.ReadAsArray(offset_x, offset_y, block_xsize, block_ysize)
        # out_band3 = in_band3.ReadAsArray(offset_x, offset_y, block_xsize, block_ysize)

        # 获取Tif的驱动,为创建切出来的图文件做准备
        gtif_driver = gdal.GetDriverByName("GTiff")

        # 创建切出来的要存的文件(3代表3个不都按,最后一个参数为数据类型,跟原文件一致)
        out_ds = gtif_driver.Create(str(k) + 'clip4.tif', block_xsize, block_ysize, outbandsize, datatype)
        # print("create new tif file succeed")

        # 获取原图的原点坐标信息,# 获取仿射矩阵信息
        ori_transform = in_ds.GetGeoTransform()
        if ori_transform:
            print(ori_transform)
            print("Origin = ({}, {})".format(ori_transform[0], ori_transform[3]))
            print("Pixel Size = ({}, {})".format(ori_transform
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳花bigdata

如果文章给您带来帮助,感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值