大家好,欢迎来到IT知识分享网。
「作者主页」:zy_destiny
「作者简介」:主要关注计算机视觉、语义分割、目标检测、遥感影像处理、变化检测等方向,正在努力成为CSDN优质创作者
「推荐专栏」:对变化检测感兴趣的小伙伴可以关注专栏“变化检测论文解读”对GDAL感兴趣的小伙伴可以关注专栏——GDAL
对目标检测感兴趣的小伙伴可以关注专栏——变化检测论文解读
对语义分割感兴趣的小伙伴可以关注专栏——语义分割
对Transformer感兴趣的小伙伴可以关注专栏——Transformer
目录
🍒🍒jp2格式说明:
jp2格式: 经过JPEG2000压缩算法压缩后的一种影像数据格式
GeoTiff格式:一种带地理坐标的以tif或tiff为后缀的一种影像数据格式
对于jp2格式,如果不追求地理坐标,只读取像素值,可以使用opencv进行数据读取,如果要保留原始数据中的地理坐标,就需要gdal来进行读取了。 本文主要讲解如何通过gdal将jp2格式数据转换为tif格式。
🍆🍆jp2格式读取方式一
用opencv读取,不包含地理坐标,读取到的波段顺序为BGR
#用opencv读取,不包含地理坐标,读取到的波段顺序为BGR import cv2 img = cv2.imread(jp2_path,cv2.IMREAD_UNCHANGED) 
🍆🍆jp2格式读取方式二
用gdal读取,能读取到地理坐标,读取到的array波段顺序为RGB
#用gdal读取,能读取到地理坐标,读取到的array波段顺序为RGB from osgeo import gdal dataset = gdal.Open(jp2_path) img = dataset.ReadAsArray()
🌺🌺jp2格式转tif格式
函数参数说明:
- 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
🙋🙋批量jp2格式转tif格式
函数参数说明:
- 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] )
整理不易,欢迎一键三连!!!
送你们一条美丽的–分割线–
🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121120.html