python-裁剪合并tif格式的图片

本文介绍了使用Python的PIL和tifffile库对tif格式图片进行裁剪和合并的方法,以及如何利用numpy的np.concatenate(),np.hstack(),np.vstack()函数实现横向和纵向的图片拼接,并保存结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

一、先裁剪合适大小在合并

1.Image库

from PIL import Image

# 打开第一张tif文件
image1 = Image.open('image1.tif')

# 根据裁剪区域裁剪第一张图
cropped_image1 = image1.crop((x1, y1, x2, y2))  # 根据具体需求填入裁剪区域的坐标

# 打开第二张tif文件
image2 = Image.open('image2.tif')

# 根据裁剪区域裁剪第二张图
cropped_image2 = image2.crop((x1, y1, x2, y2))  # 根据具体需求填入裁剪区域的坐标

# 创建新的tif文件,大小为裁剪后的图像大小
merged_image = Image.new('RGB', (new_width, new_height))  # 根据具体需求填入新图像的宽度和高度

# 将第一张裁剪后的图像粘贴到新的tif文件中
merged_image.paste(cropped_image1, (x1, y1))  # 根据具体需求填入粘贴的起始坐标

# 将第二张裁剪后的图像粘贴到新的tif文件中
merged_image.paste(cropped_image2, (x2, y2))  # 根据具体需求填入粘贴的起始坐标

# 保存合并后的tif文件
merged_image.save('merged_image.tif')

2tifffile库

import tifffile

# 打开第一张tif文件
image1 = tifffile.imread('image1.tif')

# 根据裁剪区域裁剪第一张图
cropped_image1 = image1[x1 : x2 , y1 : y2]  # 根据具体需求填入裁剪区域的坐标

# 打开第二张tif文件
image2 = tifffile.imread('image2.tif')

# 根据裁剪区域裁剪第二张图
cropped_image2 = image2[x1 : x2 , y1 : y2]  # 根据具体需求填入裁剪区域的坐标

# 创建新的tif文件,大小为裁剪后的图像大小
merged_image = Image.new('RGB', (new_width, new_height))  # 根据具体需求填入新图像的宽度和高度

# 将第一张裁剪后的图像粘贴到新的tif文件中
merged_image.paste(cropped_image1, (x1, y1))  # 根据具体需求填入粘贴的起始坐标

# 将第二张裁剪后的图像粘贴到新的tif文件中
merged_image.paste(cropped_image2, (x2, y2))  # 根据具体需求填入粘贴的起始坐标

# 保存合并后的tif文件
merged_image.save('merged_image.tif')

二、把tif格式图片横向/纵向拼接

1.np.concatenate()

import numpy as np
import tifffile

# 读取 TIFF 图像
image1 = tifffile.imread('image1.tif')
image2 = tifffile.imread('image2.tif')

# 横向拼接
concatenated_horizontal = np.concatenate((image1, image2), axis=1)

# 纵向拼接
concatenated_vertical = np.concatenate((image1, image2), axis=0)

# 保存拼接后的图像
tifffile.imwrite('concatenated_horizontal.tif', concatenated_horizontal)
tifffile.imwrite('concatenated_vertical.tif', concatenated_vertical)

2. np.hstack()横向/np.vstack()纵向

import numpy as np
import tifffile

# 读取 TIFF 图像
image1 = tifffile.imread('image1.tif')
image2 = tifffile.imread('image2.tif')

# 横向拼接
result_horizontal = np.hstack(image1, image2) 

# 纵向拼接
result_vertical = np.vstack((image1, image2)

# 保存拼接后的图像
tifffile.imwrite('result_horizontal.tif', result_horizontal.tif)
tifffile.imwrite('result_vertical.tif', result_vertical.tif)

### 使用Python合并或拼接多个TIF/TIFF图像 为了实现多张 TIFF 图像的拼接,可以采用如下方法: #### 方法一:水平/垂直堆叠单波段影像 对于简单的单通道灰度图,可以直接利用 `numpy` 的 `hstack` 或者 `vstack` 函数来完成横向或者纵向的拼接操作。 ```python import numpy as np from osgeo import gdal import matplotlib.pyplot as plt def stack_images_horizontally(image_paths): images = [] for path in image_paths: ds = gdal.Open(path) band = ds.GetRasterBand(1).ReadAsArray() normalized_band = (band - np.min(band)) / (np.max(band) - np.min(band)) images.append(normalized_band) stacked_image = np.hstack(images) return stacked_image image_files = ["E:\\00.tiff", "E:\\01.tiff"] # 添加更多图片路径以扩展拼接范围 combined_img = stack_images_horizontally(image_files) plt.figure(figsize=(8, 6)) plt.imshow(combined_img, cmap='gray') plt.axis('off') plt.show() ``` 此代码片段展示了如何通过读取两个 TIFF 文件并将其转换成 NumPy 数组后进行水平方向上的连接[^1]。 #### 方法二:基于地理坐标系的空间镶嵌 当处理具有地理位置信息的遥感数据时,则需考虑各幅图像之间的空间关系来进行精确配准后的无缝拼接。这通常涉及到重投影、裁剪以及融合边界区域等内容。 ```python from osgeo import gdal, ogr, osr def mosaic_tiffs(output_file, input_files): vrt_options = gdal.BuildVRTOptions(resampleAlg='bilinear', separate=True) vrt_ds = gdal.BuildVRT('', input_files, options=vrt_options) translate_option = gdal.TranslateOptions(format='GTiff', creationOptions=['COMPRESS=LZW']) gdal.Translate(output_file, vrt_ds, options=translate_option) input_list = ['E:/path/to/image1.tif', 'E:/path/to/image2.tif'] output_mosaic = 'E:/mosaic_result/output_mosaic.tif' mosaic_tiffs(output_mosaic, input_list) print(f"Mosaicked output saved to {output_mosaic}") ``` 上述脚本先创建了一个虚拟栅格(VRT),它是一个轻量级文件格式用于描述一组源文件而不实际复制它们的数据;接着调用了 `Translate()` 来生成最终的结果文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值