python读取tiff文件_python+tifffile之tiff文件读写方式

python读取tiff文件_python+tifffile之tiff文件读写方式背景使用 python 操作一批同样分辨率的图片 合并为 tiff 格式的文件 由于 opencv 主要用于读取单帧的 tiff 文件 对多帧的文件支持并不好 通过搜索发现了两个比较有用的包 TiffCapture 和 tifffile 两者都可用 pip 安装 其中前者主要用于读取 tiff 文件 后者可读可写 最终选择 tifffile 来合成 tiff 图片文件 安装 tifffilepipi 原理

背景

使用python操作一批同样分辨率的图片,合并为tiff格式的文件。

由于opencv主要用于读取单帧的tiff文件,对多帧的文件支持并不好。

通过搜索发现了两个比较有用的包:TiffCapture和tifffile。两者都可用pip安装。

其中前者主要用于读取tiff文件,后者可读可写。最终选择tifffile来合成tiff图片文件。

安装tifffile

pip install tifffile

原理及代码

我的图片是8 bit灰度图。

每次读取之后,先升维:

new_gray = gray_img[np.newaxis, ::]

然后再使用np.append添加到数组里。每append一次,相当于tiff增加一帧图片。

tiff_list = np.append(tiff_list, new_gray, axis=0)

所有操作完毕,则一次性保存到磁盘。

tifffile.imsave( out_tiff_path, tiff_list )

下面是我的完整代码:

import cv2

import tifffile

import time

import numpy as np

import time

import os

img_path = ‘../word_all’

out_txt_path = ‘../out_word_all.box’

out_tiff_path = ‘../out_word_all.tif’

tiff_list = None

with open(out_txt_path, ‘wb’) as f:

dir_list = os.listdir(img_path)

cnt_num = 0

for dir_name in dir_list:

dir_path = os.path.join(img_path, dir_name)

img_list = os.listdir(dir_path)

pwd = os.getcwd()

os.chdir(dir_path)

for img in img_list:

print(‘dir_path:{}’.format(dir_path))

gray_img = cv2.imread(img, cv2.IMREAD_GRAYSCALE)

new_gray = gray_img[np.newaxis, ::]

print(‘gray_img shape:{}, new_gray shape:{}’.format(gray_img.shape, new_gray.shape))

#global cnt_num

if cnt_num == 0:

print(‘cnt_num == 0’)

tiff_list = new_gray

else:

print(‘np.append’)

tiff_list = np.append(tiff_list, new_gray, axis=0)

print(‘tiff_list shape:{}’.format(tiff_list.shape))

content = ‘{} 2 2 60 60 {}\n’.format(dir_name, cnt_num)

print(content)

f.write(content.encode(‘UTF-8’))

cnt_num += 1

os.chdir(pwd)

tifffile.imsave( out_tiff_path, tiff_list )

print(‘tiff_list shape:{}’.format(tiff_list.shape))

以上这篇python+tifffile之tiff文件读写方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-01-12

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217673.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:02
下一篇 2026年3月18日 上午9:02


相关推荐

  • invocationHandler_handlermapping原理

    invocationHandler_handlermapping原理动态代理是很多框架和技术的基础,spring的AOP实现就是基于动态代理实现的。了解动态代理的机制对于理解AOP的底层实现是很有帮助的。      查看doc文档就可以知道,在java.lang.reflect包中有一个叫Proxy的类。下面是doc文档对Proxy类的说明:      “Adynamicproxyclass(simplyreferredtoasa

    2025年7月11日
    4
  • 国产数据库及厂商介绍

    国产数据库及厂商介绍在数据库的产品中 最熟悉的无非是 Oracle MySQL SQLServer 等这些国外的产品 目前国内出现了很多的数据库产品 今天抽出时间做个简单的学习了解 以下信息汇总于 2019 年 8 月 产品排名不分先后 本文内容将持续完善 补充 目录 OceanBase 阿里 蚂蚁金服 POLARDB 阿里云 GaussDB 高斯数据库 华为技术有限公司 CynosDB 腾讯

    2026年3月19日
    2
  • cannot resolve symbol println[通俗易懂]

    cannot resolve symbol println[通俗易懂]IntelliJ无法快捷键输出System.out.println();并且即使手动输入也会报错cannotresolvesymbolprintln()开发这么就,竟然犯了很二的错误。由于没写main函数导致的原因。估计今晚持续头脑发热没降下来。修改后的代码:

    2026年4月14日
    7
  • macbookpro安装homebrew_虚拟机安装mac流畅吗

    macbookpro安装homebrew_虚拟机安装mac流畅吗Homebrew简称brew,Homebrew是一款MacOS平台下的软件包管理工具,很方便帮助我们实现安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,Homebrew官网中清楚介绍了安装和基本使用安装与卸载安装1.打开mac终端将以下命令粘贴至终端。/usr/bin/ruby-e”$(curl-fsSLhttps://…

    2025年8月6日
    7
  • markdown设置锚点

    markdown设置锚点当文章的内容过的时候 需要给文章建立目录 可以实现点击目录随意的跳转到对应的内容 此时是使用 markdown 的锚点的功能 基本的格式为 标题名 给标题取得一个 id 一般与标题同名即可 aid 给标题取得一个 id 一般与标题同名即可 标题名实例如下 测试 1 测试 2 测试 3 测试 1dsdfadfadfa aid 给标题取得一个 id 一般与标题同名即可

    2026年3月17日
    2
  • html5游戏网页代码大全,HTML网页代码大全

    html5游戏网页代码大全,HTML网页代码大全1 贴图 2 加入连接 写上你想写的字 1 贴图 2 加入连接 写上你想写的字 3 在新窗口打开连接 写上要写的字消除连接的下划线在新窗口打开连接 写上你想写的字 4 移动字体 走马灯 写上你想写的字 5 字体加粗 写上你想写的字 6 字体斜体 写上你想写的字 7 字体下划线 写上你想写的字 8 字体删除线 写上你想写的字 9 字体加大 写上你想写的字 10 字体控制大小 写上你想写的字 其中字体大小可从

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号