python TIF转PNG的两种方式

文章介绍了两种将TIFF图像转换为PNG格式的方法,一种使用gdal库,另一种结合libtiff和cv2库。还讨论了插值方法在图像resize中的应用,如INTER_NEAREST和INTER_CUBIC等。最后提供了一个批量转换TIFF文件到PNG的函数示例。

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

方式1:

from osgeo import gdal
file_path=r"D:\TIF\1.tif"
ds=gdal.Open(file_path)
driver=gdal.GetDriverByName('PNG')
dst_ds = driver.CreateCopy(r'D:\PNG\1.png', ds)

方式2:(路径中不能有中文)

from libtiff import TIFF
import cv2

tif = TIFF.open(r"dataset\TIF\1.tif", mode='r')
img = tif.read_image()
"""
interpolation:指定插值的方式,图像resize之后,像素要重新计算,靠这个参数来指定重新计算像素的方式,有以下几种:
      INTER_NEAREST - 最邻近插值
      INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法
      INTER_AREA -区域插值
      INTER_CUBIC - 4x4像素邻域内的双立方插值
      INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值
"""
new_array = cv2.resize(img, (5000, 5000), interpolation=cv2.INTER_CUBIC)

cv2.imwrite(r'dataset\PNG\1.png', new_array)

批量转换:

from osgeo import gdal
import os


def TIFToPNG(tifDir_path, pngDir_path):
    for fileName in os.listdir(tifDir_path):
        if fileName[-4:] == ".tif":
            ds = gdal.Open(tifDir_path + fileName)
            driver = gdal.GetDriverByName('PNG')
            driver.CreateCopy(pngDir_path + fileName[:-4] + ".png", ds)
            print("已生成:",pngDir_path + fileName[:-4] + ".png")

if __name__ == '__main__':
    tifDir_path = "D:/dataset/TIF/"
    pngDir_path = "D:/dataset/PNG/"
    TIFToPNG(tifDir_path, pngDir_path)

### 将TIF深度图与PNG图像对齐并裁剪 为了实现TIF深度图与PNG图像的对齐和裁剪,通常涉及以下几个方面: #### 图像读取与预处理 首先需要加载两种不同格式的图像文件。对于TIF深度图和PNG图像,可以使用`cv2.imread()`函数来分别读取这两种类型的图像。 ```python import cv2 import numpy as np depth_image_tif = cv2.imread('path_to_depth.tif', cv2.IMREAD_UNCHANGED) # 加载TIF深度图 color_image_png = cv2.imread('path_to_color.png') # 加载PNG图像 ``` #### 对齐两幅图像 确保两个图像具有相同的尺寸是非常重要的。如果它们原始分辨率不匹配,则应先调整其中一个或两个图像到统一大小。这可以通过插值方法完成,例如双线性插值或最近邻插值[^1]。 ```python # 假设以PNG图像作为基准进行缩放 target_size = color_image_png.shape[:2][::-1] # 获取目标尺寸(宽度, 高度) resized_depth_image = cv2.resize(depth_image_tif, target_size, interpolation=cv2.INTER_NEAREST) ``` #### 定义裁剪区域 定义一个共同的兴趣区(AOI),即想要保留的部分,在此区域内执行后续操作。可以根据特定需求手动指定坐标或者通过其他方式自动计算得到这些边界值。 ```python x_start, y_start = 50, 70 # 裁剪起始位置 width, height = 300, 400 # 裁剪宽高 roi_rectangle = ((x_start, y_start), (x_start + width, y_start + height)) ``` #### 应用裁剪功能 利用OpenCV库中的切片语法可以直接获取感兴趣子矩形内的像素数据;也可以采用掩码技术来进行更复杂的形状裁剪。这里展示简单的矩形裁剪案例。 ```python cropped_color_img = color_image_png[y_start:y_start+height, x_start:x_start+width] cropped_depth_img = resized_depth_image[y_start:y_start+height, x_start:x_start+width] # 显示结果 cv2.imshow("Cropped Color Image", cropped_color_img) cv2.imshow("Cropped Depth Image", cropped_depth_img) key = cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码片段展示了如何将TIF深度图与PNG图像对齐并对二者应用同样的裁剪逻辑。需要注意的是,当涉及到具体应用场景时,可能还需要额外考虑诸如色彩空间换、位深一致性等问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhichao_97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值