用gdal库读取tif影像并填充边缘,并根据窗口大小滑动裁剪裁剪(包含gdal转PIL)

相关文章

PIL,OPENCV之间的转换关系_pil cvtcolor(image)_番茄就要炒鸡蛋的博客-CSDN博客

python GDAL和PIL图像转换_gdal.readasarray和pil_llc的足迹的博客-CSDN博客

一、原始数据

二、分别读取数据

1、gdal读取的array 

2、pil读取的array

 

三、 gdal转pil

image= np.rollaxis(image , 0, 3)

 转换结果

总的代码 

用gdal库读取tif影像并填充边缘,并根据窗口大小滑动裁剪裁剪

​
def clip_picture(file_path,a):
    slide_window = 1024  # 大的滑动窗口
    step_length = 1024
    sat_list = os.listdir(file_path) 

    for file in sat_list:
        Image_Path = os.path.join(file_path,file)
        image=gdal.Open(Image_Path)
        width = image.RasterXSize
        height = image.RasterYSize

        # image = Image.open(Image_Path)

        # width = image.size[0]  # 获取图像的宽
        # height = image.size[1]  # 获取图像的高

        right_fill = step_length - (width % step_length)
        bottom_fill = step_length - (height % step_length)

        width_path_number = int((width + right_fill) / step_length)  # 横向切成的小图的数量
        height_path_number = int((height + bottom_fill) / step_length)  # 纵向切成的小图的数量

        #print(width_path_number, height_path_number)
        # image = np.array(image)
        image=image.ReadAsArray()
        
        if a=='tif':
            image= np.rollaxis(image , 0, 3)
        


        image = cv2.copyMakeBorder(image, top=0, bottom=bottom_fill, left=0, right=right_fill,
                                borderType=cv2.BORDER_CONSTANT, value=0)

        image = cv2.copyMakeBorder(image, top=step_length // 2, bottom=step_length // 2, left=step_length // 2,
                                right=step_length // 2,
                                borderType=cv2.BORDER_CONSTANT, value=0)  # 填充1/2步长的外边框
    

        # 2.将膨胀后的大图按照滑窗裁剪
        tar = './dataset/train/'
       
        target=tar

        image_crop_addr = target  # 图像裁剪后存储的文件夹
        # image = Image.fromarray(image)  # 将图片格式从numpy转回PIL
        image=Image.fromarray(np.uint8(image))
        l = 0
        if a=='tif':
            for j in range(height_path_number):
                for i in range(width_path_number):
                    box = (i * step_length, j * step_length, i * step_length + slide_window, j * step_length + slide_window)
                    small_image = image.crop(box)
                    small_image.save(
                        image_crop_addr + file[:-4] + '({},{})@{:04d}_sat.tif'.format(j, i, l), quality=95)
                    l = l + 1
        
        if a=='png':
            for j in range(height_path_number):
                for i in range(width_path_number):
                    box = (i * step_length, j * step_length, i * step_length + slide_window, j * step_length + slide_window)
                    small_image = image.crop(box)
                    small_image.save(
                        image_crop_addr + file[:-4] + '({},{})@{:04d}_mask.png'.format(j, i, l), quality=95)
                    l = l + 1

​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我不是很清楚gdal读取tif文件的高度值是什么意思,但是我可以尝试给你一些有关这个话题的信息。gdal是一个用来处理地理空间数据的开源,它可以帮助你读取tif文件中的高度值,并且提供有关tif文件的更多信息。 ### 回答2: 使用GDAL可以读取tif文件的高度值,具体操作步骤如下: 1. 首先,你需要在Python环境下安装GDAL。你可以使用pip命令在终端中执行以下命令来安装GDAL: ``` pip install gdal ``` 2. 安装完成后,你需要导入gdal并打开tif文件。使用`gdal.Open()`函数可以打开tif文件,指定tif文件的路径作为参数。示例代码如下图所示: ```python from osgeo import gdal # 打开tif文件 dataset = gdal.Open('path/to/your/tif/file.tif') ``` 3. 接下来,你可以获取tif文件的高度值数据。使用`dataset.ReadAsArray()`函数可以读取tif文件的高度值数据。示例代码如下所示: ```python # 获取tif文件的高度值数据 height_data = dataset.ReadAsArray() ``` 4. 然后,你可以使用height_data变量来进行后续的处理和分析。 以上就是使用GDAL读取tif文件的高度值的基本步骤。需要注意的是,GDAL还有其他一些功能函数可以帮助你更好地处理tif文件,你可以根据自己的需求进一步探索和学习。 ### 回答3: gdal是一个用于读取和处理栅格数据的开源。要使用gdal读取tif文件的高度值,需要进行以下步骤: 1. 导入gdal:在代码的开头,使用import语句导入gdal。例如:`import gdal` 2. 打开tif文件:使用gdal.Open()方法打开tif文件。该方法接受tif文件的路径作为参数,并返回一个数据集对象。例如:`dataset = gdal.Open('path/to/your.tif')` 3. 获取波段对象:通过访问数据集对象的GetRasterBand()方法,可以获取tif文件中的波段对象。对于高程数据,通常是获取第一个波段对象。例如:`band = dataset.GetRasterBand(1)` 4. 读取高度值:使用波段对象的ReadAsArray()方法,将高度值存储为一个二维数组。该方法接受要读取的像元范围作为参数,如果想读取整个tif文件的高度值,则将该参数设置为None。例如:`heights = band.ReadAsArray()` 5. 关闭数据集对象:读取完高度值后,需要使用dataset对象的Close()方法关闭数据集。这是为了释放内存资源。例如:`dataset.Close()` 通过以上步骤,就可以使用gdal读取tif文件中的高度值。可以进一步对高度值进行分析和处理,或者将其可视化显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值