「作者主页」:zy_destiny
「作者简介」:主要关注计算机视觉、语义分割、目标检测、遥感影像处理、变化检测等方向,正在努力成为CSDN优质创作者
「推荐专栏」:对变化检测感兴趣的小伙伴可以关注专栏“变化检测论文解读”对GDAL感兴趣的小伙伴可以关注专栏——GDAL
对目标检测感兴趣的小伙伴可以关注专栏——变化检测论文解读
对语义分割感兴趣的小伙伴可以关注专栏——语义分割
对Transformer感兴趣的小伙伴可以关注专栏——Transformer
目录
jp2格式说明:
jp2格式读取方式一
jp2格式读取方式二
jp2格式转tif格式
批量jp2格式转tif格式
jp2格式: 经过JPEG2000压缩算法压缩后的一种影像数据格式
GeoTiff格式:一种带地理坐标的以tif或tiff为后缀的一种影像数据格式
对于jp2格式,如果不追求地理坐标,只读取像素值,可以使用opencv进行数据读取,如果要保留原始数据中的地理坐标,就需要gdal来进行读取了。 本文主要讲解如何通过gdal将jp2格式数据转换为tif格式。
用opencv读取,不包含地理坐标,读取到的波段顺序为BGR
#用opencv读取,不包含地理坐标,读取到的波段顺序为BGR
import cv2
img = cv2.imread(jp2_path,cv2.IMREAD_UNCHANGED)
用gdal读取,能读取到地理坐标,读取到的array波段顺序为RGB
#用gdal读取,能读取到地理坐标,读取到的array波段顺序为RGB
from osgeo import gdal
dataset = gdal.Open(jp2_path)
img = dataset.ReadAsArray()
函数参数说明:
- gdal.GDT_Byte格式为uint8
- gdal.GDT_UInt16为uint16
- 数据均为单波段
- jp2_path:jp2格式数据路径
- save_file:tif格式数据路径
- 设置nodata为0
#gdal.GDT_Byte格式为uint8,gdal.GDT_UInt16为uint16,数据均为单波段
#jp2_path:jp2格式数据路径
#save_file:tif格式数据路径
from osgeo import gdal
import numpy as np
def jp2Totif(jp2_path,save_path,file_name):
file_name = os.path.splitext(file_name)[0]
save_file = os.path.join(save_path,file_name)
save_file = save_file+'.tif'
dataset = gdal.Open(jp2_path)
rows = dataset.RasterYSize
cols = dataset.RasterXSize
projection = dataset.GetProjection()
trans = dataset.GetGeoTransform()
data = dataset.ReadAsArray()
if data.dtype == 'uint16':
driver = gdal.GetDriverByName('GTiff')
out_dataset = driver.Create(save_file, cols, rows, 1, gdal.GDT_UInt16)
out_dataset.SetProjection(projection)
out_dataset.SetGeoTransform(trans)
out_dataset.GetRasterBand(1).WriteArray(data)
out_dataset.GetRasterBand(1).SetNoDataValue(0)
out_dataset.FlushCache()
del dataset, out_dataset
elif data.dtype == 'uint8':
driver = gdal.GetDriverByName('GTiff')
out_dataset = driver.Create(save_file, cols, rows, 1, gdal.GDT_Byte)
out_dataset.SetProjection(projection)
out_dataset.SetGeoTransform(trans)
out_dataset.GetRasterBand(1).WriteArray(data)
out_dataset.GetRasterBand(1).SetNoDataValue(0)
out_dataset.FlushCache()
del dataset, out_dataset
函数参数说明:
- input_dir:jp2格式数据输入文件夹地址
- output_dir:tif格式数据保存文件夹地址
- gdal.GDT_Byte格式为uint8
- gdal.GDT_UInt16为uint16
- 数据均为单波段
- 设置nodata为0
from osgeo import gdal
import numpy as np
def jp2Totif(jp2_path,save_path,file_name):
file_name = os.path.splitext(file_name)[0]
save_file = os.path.join(save_path,file_name)
save_file = save_file+'.tif'
dataset = gdal.Open(jp2_path)
rows = dataset.RasterYSize
cols = dataset.RasterXSize
projection = dataset.GetProjection()
trans = dataset.GetGeoTransform()
data = dataset.ReadAsArray()
if data.dtype == 'uint16':
driver = gdal.GetDriverByName('GTiff')
out_dataset = driver.Create(save_file, cols, rows, 1, gdal.GDT_UInt16)
out_dataset.SetProjection(projection)
out_dataset.SetGeoTransform(trans)
out_dataset.GetRasterBand(1).WriteArray(data)
out_dataset.GetRasterBand(1).SetNoDataValue(0)
out_dataset.FlushCache()
del dataset, out_dataset
elif data.dtype == 'uint8':
driver = gdal.GetDriverByName('GTiff')
out_dataset = driver.Create(save_file, cols, rows, 1, gdal.GDT_Byte)
out_dataset.SetProjection(projection)
out_dataset.SetGeoTransform(trans)
out_dataset.GetRasterBand(1).WriteArray(data)
out_dataset.GetRasterBand(1).SetNoDataValue(0)
out_dataset.FlushCache()
del dataset, out_dataset
if __name__ == "__main__":
input_dir = r'jp2格式文件所在路径'
output_dir = r'GeoTiff文件的保存路径'
for filename in os.listdir(input_dir):
if filename.endswith('jp2'):
jp2Totif(os.path.join(input_dir, filename), output_dir , filename.split('.jp2')[0] )
送你们一条美丽的--分割线--
⛵⛵⭐⭐