Skip to content Skip to footer

基于Python和GDAL实现遥感影像无损压缩

背景

一些做遥感数据的公司,随着数据越来越多,所占的空间也越来越大。对遥感影像进行无损压缩可以有效的节省空间,同时在操作影像时也可以节省内存。在网上搜索了遥感影像压缩的相关代码,发现都是基于C++写的,没有python的,GDAL的python API文档里也没有这块的详细描述,这里我就记录一下如何使用python和GDAL实现遥感影像的无损压缩。

代码

主要是使用GDAL的CreateCopy 方法

# from common import gdalfun

import os

from osgeo import gdal

def get_file_size(file_path):

"""获取文件占空间所少M"""

fsize = os.path.getsize(file_path)

fsize = fsize / float(1024 * 1024)

return round(fsize, 2)

def progress(percent, msg, tag):

"""进度回调函数"""

print(percent, msg, tag)

def compress(path, target_path):

"""使用gdal进行文件压缩"""

dataset = gdal.Open(path)

driver = gdal.GetDriverByName('GTiff')

driver.CreateCopy(target_path, dataset, strict=1, callback=progress, options=["TILED=YES", "COMPRESS=LZW"])

# strict=1表示和原来的影像严格一致,0表示可以有所调整

# callback为进度回调函数

# PACKBITS快速无损压缩,基于流

# LZW针对像素点,黑白图像效果好

del dataset

source_path = "G:\\孟津提供\\孟津影像\\孟津0312.dat"

target_path = "G:\\孟津提供\\孟津影像\\孟津0312_copy2.dat"

print("处理前", str(get_file_size(source_path)) + "MB")

compress(source_path, target_path)

print("处理后", str(get_file_size(target_path)) + "MB")

控制台输出显示

处理前 252.45MB

0.0 None

0.010009765625 None

0.02001953125 None

0.030008951822916664 None

.........

.........

0.9400436046511628 None

0.9500363372093024 None

1.0 None

处理后 121.41MB

打开测试

使用ArcGIS打开处理前后的影像进行对比,没有任何变化

处理前

处理后

压缩前属性

压缩后属性

Copyright © 2088 我的世界杯_瑞奇马丁世界杯主题曲 - msdc8.com All Rights Reserved.
友情链接