libtiff 模块的使用

559次阅读
没有评论

共计 1634 个字符,预计需要花费 5 分钟才能阅读完成。

安装模块

  • 可以直接使用 pip install libtiff 来进行安装
  • 如果失败,则可以去 Python 库里面下载 **.whl 包来安装
  • https://www.lfd.uci.edu/~gohlke/pythonlibs/ 进入该库搜索 pylibtiff,进行下载
  • 安装:pip install **.whl

注意如果 `libtiff 还依赖其他的模块才能工作则按照抛出的 Error 继续下载安装即可

模块操作

博客:http://www.zzvips.com/article/60677.html

1. 拆分 tif 图片

from libtiff import TIFF
import os
import cv2

def tif_to_image():
    # 打开一个 tif 文件,指定 r 模式
    tif_obj1 = TIFF.open("uhh153_M1_LRM_2_02.tif",mode='r')
    for i, image in enumerate(tif_obj1.iter_images()):  # 得到的生成器
        # 使用 cv2 将拿到的 image 保存成图片
        # cv2.imwrite(f"{str(i + 1)}_output.jpg", image)  # 路径不能有中文
        cv2.imencode(".jpg", image)[1].tofile(fr".\save\{str(i + 1)}_output.jpg")  # 可以支持中文路径

2. 将一组图片合成 tif 文件

from libtiff import TIFF
from PIL import Image
import os

def image_to_tif():
    img_dir = r"./save"
    img_list = os.listdir(img_dir)
    # 以 w 模式打开一个新 tif 文件准备写入
    out_tiff = TIFF.open(r"save-tif.tif", mode='w')
    for img_name in img_list:
        # 使用 PIL 打开照片成 array 形式
        img_array = Image.open(os.path.join(img_dir,img_name))
        # 写入到空的 tif 文件中
        out_tiff.write_image(img_array, compression=None, write_rgb=True)
    # 关闭文件
    out_tiff.close()

3. 其他操作

  • 获取 numpy array
# 获取 tif 目录下的所有图片,以 numpy 数组的形式返回
images = tif_obj1.read_image()
"""
[[104 108 114 ... 130 129 129]
 [103 107 114 ... 130 129 128]
 [101 107 114 ... 130 129 128]
 ...
 [112 111 107 ... 125 124 124]
 [112 111 107 ... 126 125 124]
 [112 111 107 ... 126 125 125]]
"""
# tif_obj1.iter_images() 得到的是生成器
# 迭代出来的也是 array 形式

# Image.open(" 图片路径 ") 得到的也是 array 的形式
  • 练习
from libtiff import TIFF
import os
import cv2

# tif 里有 20 张图片,只取 10 张
def tif_to_tif():
    tif_obj1 = TIFF.open("uhh153_M1_LRM_2_02.tif",mode='r')
    tif_obj2 = TIFF.open("tifffile.tif",mode='w')
    [tif_obj2.write_image(image) for i, image in enumerate(tif_obj1.iter_images()) if i < 10]

    # count = 0
    # for image in tif_obj1.iter_images():
    #     count +=1
    #     tif_obj2.write_image(image)
    #     if count==10:
    #         break    
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-11发表,共计1634字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)