关于利用GDAL RasterIo()连续读取大影像内存泄漏问题

3.5G遥感影像为例:

 

作为菜鸟遇到的问题:对代码进行跟踪检查发现RasterIo()读取3.5G遥感影像的时候内存逐次增长,虽然每次循环都释放了当前块的内存,但是仍无法回落到处理这一块之前的值,直到最终释放GDALDataset指针,内存才会回落至打开文件前的值(内存占用最高2.4G)。内存的不断增长显然对处理大文件会产生致命问题!究其原因,每执行一次RasterIO内存都会(不太慢的)增长,以致于每一块处理完后内存不彻底回落。尝试每次处理完后删除当前的RasterBand指针也无法回落。

解决方法:

1、      使用RasterIO()对大图像进行分块操作。RasterIO()函数能够对图像任意指定区域任意波段的数据按指定数据类型,指定排列方式读入内存和写入文件中,因此可以实现对大影像的分块读,运算,写操作。对于大图像处理,按照传统方法,首先要将图像所有数据读入内存中,进行相应操作后,再一次性将处理好的数据写入文件中,这样需要耗费很大内存,容易内存溢出,而且存续可执行行差。采用分块处理技术,一幅1G的影像,在整个数据处理过程中,可以只占用几十兆的内存,而且运算量不会增加。

2、      循环调用RasterIo()读取图像时都执行一次打开文件和关闭文件释放RasterDataset指针的操作。这样做内存的开销极小,但频繁的打开关闭文件总是不太好。

希望各位大神能提出更好的解决方案!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
gdal rasterio 是一个基于 Python 的开源库,用于读取、写入和处理栅格数据。它是在 GDAL(地理空间数据抽象库)和 Rasterio(基于 GDAL 的 Python 绑定)的基础上开发的。 gdal rasterio 的源码包括各种功能和模块,用于处理不同类型的栅格数据,如 DEM(数字高程模型)、卫星影像和遥感数据等。它提供了一种简单而强大的接口,可以在 Python 环境中轻松读取和处理这些数据。 源码中的主要模块包括: 1. 数据读取和写入:gdal rasterio 提供了功能强大的数据读取和写入功能,可以加载不同格式的栅格数据文件,如 TIFF、GeoTIFF、JPEG 等,并将数据保存到不同的格式中。它还支持对栅格数据的各种操作,如投影转换、剪切、裁剪、重采样等。 2. 数据处理和分析:gdal rasterio 还包括一些数据处理和分析的功能,如计算栅格数据的统计信息、计算两个栅格数据的差异、计算栅格数据的直方图等。这些功能使用户能够更加灵活地进行栅格数据的处理和分析。 3. 元数据管理:gdal rasterio 还提供了元数据管理的功能,用户可以读取和修改栅格数据文件的元数据信息,如坐标系、分辨率、地理范围等。这使得用户能够更好地了解和使用栅格数据。 总之,gdal rasterio 是一个功能强大且易于使用的库,可以方便地读取、写入和处理栅格数据。它的源码中包含了各种功能和模块,帮助用户处理不同格式的栅格数据,并提供了各种数据处理和分析的功能,以及元数据管理的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值