利用python将多个jp2格式转为tif格式(亲测可用)

利用python将多个jp2格式转为tif格式(GF等影像)

**注意:**由于jp2无坐标参考系,因此结果无空间参考,需要进行jp2附带的rpb做校正即可得到有参考系的tif结果。
具体代码如下(亲测可用):

不会代码的可以下载下面链接的exe,双击即可得到处理结果。
jp2格式转为tif格式只需一秒(sentinel、GF等影像)


```python
# -*- coding: utf-8 -*-

from osgeo import gdal, osr, ogr
import glob

#利用GDAL读取jp2并转换为tif
def S2tif(filename):
    # 打开栅格数据集
    print(filename)
    root_ds = gdal.Open(filename)
    print(root_ds)
    print(type(root_ds))
    # 返回结果是一个list,list中的每个元素是一个tuple,每个tuple中包含了对数据集的路径,元数据等的描述信息
    # tuple中的第一个元素描述的是数据子集的全路径
    # ds_list = root_ds.GetSubDatasets()  # 获取子数据集。该数据以数据集形式存储且以子数据集形式组织
    # visual_ds = gdal.Open(ds_list)  # 打开第1个数据子集的路径。ds_list有4个子集,内部前段是路径,后段是数据信息
    visual_arr = root_ds.ReadAsArray()  # 将数据集中的数据读取为ndarray
    print('array')
    print(visual_arr)
    print(visual_arr.shape)
    # 创建.tif文件
    band_count = root_ds.RasterCount  # 波段数
    print(band_count)
    xsize = root_ds.RasterXSize
    ysize = root_ds.RasterYSize
    print(xsize)
    print(ysize)
    print(root_ds.GetGeoTransform())
    out_tif_name = filename[:-4] + ".tif"
    driver = gdal.GetDriverByName("GTiff")
    out_tif = driver.Create(out_tif_name, xsize, ysize, band_count, gdal.GDT_Int16)
    out_tif.SetProjection(root_ds.GetProjection())  # 设置投影坐标
    # data_set.SetGeoTransform(GeoTransform)
    # out_tif.GetGeoTransform(root_ds.GetGeoTransform())
    if band_count>1:
        for i in range(band_count):
                # 数据写出
            out_tif.GetRasterBand(i + 1).WriteArray(visual_arr[i])  # 将每个波段的数据写入内存,此时没有写入硬盘
    else:
        out_tif.GetRasterBand(1).WriteArray(visual_arr)
    out_tif.FlushCache()  # 最终将数据写入硬盘
    out_tif = None  # 注意必须关闭tif文件

if __name__ == "__main__":
    #只需修改下方jp2路径,自动识别jp2文件
    SAFE_Path = (r'D:\中科星图\地面站数据\GF1D_2mTDICCD2_MYC_202103231227_202103231236_90')
    data_list = glob.glob(SAFE_Path + "\\*.JP2")

    #filename = ('E:\\RSDATA\\Sentinel2\\L2A\\S2A_MSIL2A_20210220T024731_N9999_R132_T51STA_20210306T024402.SAFE\\MTD_MSIL2A.xml')
    for i in range(len(data_list)):
        data_path = data_list[i]
        file_name=data_path
        print(file_name)
        xml_name = data_path[:-4] + ".xml"
        # get_geo(xml_name)
        S2tif(file_name)
        print(data_path + "-----转tif成功")
    print("----转换结束----")



  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值