python+tifffile之tiff文件读写方式


Posted in Python onJanuary 13, 2020

背景

使用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文件读写方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用CMD模块更优雅的运行脚本
May 11 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
Python中return self的用法详解
Jul 27 Python
用python3教你任意Html主内容提取功能
Nov 05 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python+logging+yaml实现日志分割
Jul 22 Python
导致python中import错误的原因是什么
Jul 01 Python
如何创建一个Flask项目并进行简单配置
Nov 18 Python
python实现定时发送邮件
Dec 23 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 #Python
手动安装python3.6的操作过程详解
Jan 13 #Python
Python中join()函数多种操作代码实例
Jan 13 #Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 #Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 #Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 #Python
Python timeit模块的使用实践
Jan 13 #Python
You might like
php中如何防止表单的重复提交
2013/08/02 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
jquery 使用简明教程
2014/03/05 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
python2 与python3的print区别小结
2018/01/16 Python
tensorflow更改变量的值实例
2018/07/30 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
python 用struct模块解决黏包问题
2020/11/07 Python
园林设计师自荐信
2013/11/18 职场文书
打架检讨书400字
2014/01/17 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
拖欠货款起诉状
2015/05/20 职场文书
实施意见格式范本
2015/06/05 职场文书
windows安装python超详细图文教程
2021/05/21 Python
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android