当前位置:   article > 正文

python影像裁剪并保存成tiff格式_bmp转换成tiff python

bmp转换成tiff python
  1. from read_landsat8 import read_landsat8_bands
  2. import numpy as np
  3. from osgeo import gdal_array
  4. def get_img(base_path):
  5. """
  6. 叠加波段的简单demo
  7. 与mask矩阵一起构建成3维数组结构"""
  8. bands = read_landsat8_bands(base_path)
  9. # 读取数据
  10. B1_gdal = gdal_array.LoadFile(bands[0][0])
  11. B2_gdal = gdal_array.LoadFile(bands[0][1])
  12. B3_gdal = gdal_array.LoadFile(bands[0][2])
  13. # 转化成ndarray形式
  14. B1_np = np.array(B1_gdal)
  15. B2_np = np.array(B2_gdal)
  16. B3_np = np.array(B3_gdal)
  17. print(B1_np.shape)
  18. B123 = np.stack([B1_np, B2_np, B3_np], axis=0)
  19. print(B123.shape) # 3,7301,7341
  20. # 构建0-1 mask矩阵
  21. height = B123.shape[1]
  22. width = B123.shape[2]
  23. mask = np.random.randint(0, 2, (1, height, width))
  24. # 按照通道堆叠
  25. img = np.concatenate([B123, mask], axis=0)
  26. return img

这里得到的img其实是一个3维数组,在本例中,它的维度是
4×7301×7341

envi查看一下堆叠后的图像

在这里插入图片描述

 

图像裁剪

有了上面构建的img数据,再设定一个裁剪尺寸,我们就可以进行图像裁剪了。

  1. def crop_img(img, cropsize):
  2. """
  3. 裁剪图像为指定格式并保存成tiff
  4. 输入为array形式的数组
  5. """
  6. num = 0
  7. height = img.shape[1]
  8. width = img.shape[2]
  9. # 从左上开始裁剪
  10. for i in range(int((height) / (cropsize))): # 行裁剪次数
  11. for j in range(int((width) / (cropsize))): # 列裁剪次数
  12. cropped = img[:, # 通道不裁剪
  13. i * cropsize: i * cropsize + cropsize,
  14. j * cropsize: j * cropsize + cropsize,
  15. ]
  16. num = num + 1
  17. target = 'tiff_crop' + '/cropped{n}.tif'.format(n=num)
  18. out = gdal_array.SaveArray(cropped, target, format="GTiff")
  19. # # 向前裁剪最后一列
  20. for i in range(int((height) / (cropsize))):
  21. for j in range(int((width) / (cropsize))):
  22. cropped = img[:, # 通道不裁剪
  23. i * cropsize: i * cropsize + cropsize, # 所有行
  24. width - cropsize: width, # 最后256
  25. ]
  26. num = num + 1
  27. target = 'tiff_crop' + '/cropped{n}.tif'.format(n=num)
  28. out = gdal_array.SaveArray(cropped, target, format="GTiff")
  29. # # 向前裁剪最后一行
  30. for i in range(int((height) / (cropsize))):
  31. for j in range(int((width) / (cropsize))):
  32. cropped = img[:, # 通道不裁剪
  33. height - cropsize: height, # 最后256
  34. j * cropsize: j * cropsize + cropsize, # 所有列
  35. ]
  36. num = num + 1
  37. target = 'tiff_crop' + '/cropped{n}.tif'.format(n=num)
  38. out = gdal_array.SaveArray(cropped, target, format="GTiff")
  39. # 裁剪右下角
  40. cropped = img[:, # 通道不裁剪
  41. height - cropsize: height,
  42. width - cropsize: width,
  43. ]
  44. num = num + 1
  45. target = 'tiff_crop' + '/cropped{n}.tif'.format(n=num)
  46. gdal_array.SaveArray(cropped, target, format="GTiff")

python影像裁剪并保存成tiff格式(规则网格法)_一只眠羊e的博客-CSDN博客_python 存tiff格式

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/329887
推荐阅读
相关标签
  

闽ICP备14008679号