tiff文件的读写
使用libtiff库
参考 https://www.tjelvarolsson.com/blog/saving-16bit-tiff-files-using-python/
使用tifffile库
import numpy as np
ar2=np.array([ar,ar,ar])
tifffile.imwrite('temp.tif', ar2, metadata={'axes': 'CYX'})
ar2 =tifffile.imread('temp.tif')
ar2.shape
使用raster.io库:
import numpy as np
import rasterio
from affine import Affine
from rasterio.plot import reshape_as_raster, reshape_as_image
path='/mnt/lustre/menglingxuan/buildingwolf/20200329/haerbin_18/google/anno_20200924/OffsetField/Npy/L18_93448_223176.npy'
arr=np.load(path) #arr的shape为[2048,2048,3]
r_arr=reshape_as_raster(arr)#r_arr的shape为[3,2048,2048]
#写入tif文件,参考https://www.osgeo.cn/rasterio/topics/writing.html
with rasterio.Env():
profile={'driver': 'GTiff', 'dtype': 'float32', 'nodata': None, 'width': W,'height': H, 'count': C, 'crs': None, 'transform': Affine(1.0, 0.0, 0.0,0.0, 1.0, 0.0), 'tiled':False, 'interleave': 'pixel'}
profile.update(
dtype=rasterio.float32, #数据格式
count=3,#波段数是3
compress='lzw')#lzw是无损压缩,可以完全恢复
with rasterio.open('test2.tif','w',**profile) as dst_dataset:
dst_dataset.write(r_arr) #将r_arr写入文件中
#读取tif文件
#读取tif文件,参考https://www.osgeo.cn/rasterio/topics/reading.html
import rasterio
src2=rasterio.open('test2.tif')
array2 = src2.read() #(3,2048,2048)
r_array2=reshape_as_image(array2) #(2048,2048,3)
print(np.sum(r_array2==arr),arr.shape[0]*arr.shape[1]*arr.shape[2])
src.close()
import rasterio
from rasterio.enums import Resampling
with rasterio.open("example.tif") as dataset:
data = dataset.read(
out_shape=(dataset.height * 2, dataset.width * 2, dataset.count),
resampling=resampling.bilinear
)
用scipy来读取和保存tiff:
scipy读取tiff没啥问题,保存tiff时会将格式转为uint8保存,导致信息丢失
>>> import scipy.misc
>>> scipy.misc.imsave('scipy.tiff', ar)
>>> ar2 = scipy.misc.imread('scipy.tiff')
>>> ar2.dtype
dtype('uint8')
>>> np.max(ar2)
0
在wndows下使用tiffile 来存储和读取图片:
import tifffile as tiff
im_cada = tiff.imread(FILE_cadastral2015)
tiff.imsave('./result/result_temp.tiff', result_temp)