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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
django框架模板语言使用方法详解
Jul 18 Python
python django生成迁移文件的实例
Aug 31 Python
Pyecharts地图显示不完成问题解决方案
May 11 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
50道外企软件测试面试题
2014/08/18 面试题
小学开学寄语
2014/01/19 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
总经理助理的职责
2014/03/14 职场文书
企业安全生产标语
2014/06/06 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
社区端午节活动总结
2015/02/11 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
单位工资证明范本
2015/06/12 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
Python如何识别银行卡卡号?
2021/06/10 Python