python-对超大遥感图像进行裁剪

代码如下:

from PIL import Image
# 解决文件过大问题
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None
import sys

#先将 input image 填充为正方形
def fill_image(image):
    width, height = image.size
    #选取长和宽中较大值作为新图片的
    new_image_length = width if width > height else height
    #定义边长为5000的倍数,将图像作为5000像素的方块整数裁剪
    new_image_length = (int(new_image_length/5000) + 1) * 5000
    #生成新图片[白底]
    new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')   #注意这个函数!
    # #将之前的图粘贴在新图上,居中
    # if width > height:#原图宽大于高,则填充图片的竖直维度  #(x,y)二元组表示粘贴上图相对下图的起始位置,是个坐标点。
    #     new_image.paste(image, (0, int((new_image_length - height) / 2)))
    # else:
    #     new_image.paste(image, (int((new_image_length - width) / 2),0))
    # 将原来的图像贴在新的白底上
    return new_image

def cut_image(image):
    width, height = image.size
    item_width = int(width / 3)  #因为朋友圈一行放3张图。
    box_list = []
    # (left, upper, right, lower)
    for i in range(0,3):
        for j in range(0,3):
            #打印切割后尺寸
            print((i*item_width,j*item_width,(i+1)*item_width,(j+1)*item_width))
            box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
            box_list.append(box)
    image_list = [image.crop(box) for box in box_list]
    return image_list

#保存
def save_images(image_list):
    index = 1
    for image in image_list:
        image.save(str(index) + '.png', 'PNG')
        index += 1

if __name__ == '__main__':
    file_path = r"G:\DataSets\satellite-images-from-school\images\20AUG28032154-2AS-013425282010_01_P001_RAW_psh.jpg"  #图片保存的地址
    image = Image.open(file_path)
    #image.show()
    image_new = fill_image(image)
    image_list = cut_image(image_new)
    save_images(image_list)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用Python中的库来对遥感图像进行裁剪,其中一个常用的库是GDAL(Geospatial Data Abstraction Library)。以下是一个示例代码,演示如何使用GDAL来裁剪遥感图像: ```python from osgeo import gdal def crop_image(input_image, output_image, xmin, ymin, xmax, ymax): # 打开输入图像 dataset = gdal.Open(input_image) # 获取输入图像的投影和地理转换信息 projection = dataset.GetProjection() geotransform = dataset.GetGeoTransform() # 计算裁剪窗口在图像上的像素坐标 x_offset = int((xmin - geotransform[0]) / geotransform[1]) y_offset = int((ymin - geotransform[3]) / geotransform[5]) width = int((xmax - xmin) / geotransform[1]) height = int((ymax - ymin) / geotransform[5]) # 创建输出图像 driver = gdal.GetDriverByName('GTiff') output_dataset = driver.Create(output_image, width, height, dataset.RasterCount, dataset.GetRasterBand(1).DataType) # 设置输出图像的投影和地理转换信息 output_dataset.SetProjection(projection) output_dataset.SetGeoTransform((xmin, geotransform[1], 0, ymin, 0, geotransform[5])) # 逐波段写入输出图像数据 for i in range(1, dataset.RasterCount + 1): band = dataset.GetRasterBand(i).ReadAsArray(x_offset, y_offset, width, height) output_dataset.GetRasterBand(i).WriteArray(band) # 关闭数据集 dataset = None output_dataset = None # 调用crop_image函数进行裁剪 input_image = 'input_image.tif' output_image = 'output_image.tif' xmin = 100.0 ymin = 200.0 xmax = 300.0 ymax = 400.0 crop_image(input_image, output_image, xmin, ymin, xmax, ymax) ``` 在上述代码中,`input_image`是输入图像的路径,`output_image`是输出图像的路径,`xmin`、`ymin`、`xmax`和`ymax`是裁剪窗口的坐标范围。通过调用`crop_image`函数,你可以将输入图像裁剪为指定范围的输出图像。请确保已经安装了GDAL库,并将输入图像替换为你自己的遥感图像路径。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值