• ✍51 libtiff 模块的使用


    安装模块

    • 可以直接使用 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    
    
  • 相关阅读:
    eclipse的web项目热部署
    JAVA字符串转日期或日期转字符串
    右下角弹出框
    div拖拽
    js的富文本框与日期插件
    slected多选框的转移
    判断当前日期是否是当月数据
    java常见面试题(二)
    静态代理和动态代理
    java常见面试题(一)
  • 原文地址:https://www.cnblogs.com/songhaixing/p/15607369.html
Copyright © 2020-2023  润新知