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入门篇之列表和元组
Oct 17 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 Python
玩转python爬虫之爬取糗事百科段子
Feb 17 Python
Python matplotlib画图与中文设置操作实例分析
Apr 23 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
Django如何实现上传图片功能
Aug 16 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
python 如何引入协程和原理分析
Nov 30 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 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
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
PHP中的use关键字概述
2014/07/23 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
Laravel实现表单提交
2017/05/07 PHP
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
详解【python】str与json类型转换
2019/04/29 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
struct与class的区别
2014/02/03 面试题
安全承诺书范文
2014/03/26 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
Mysql Show Profile
2021/04/05 MySQL
一文搞懂php的垃圾回收机制
2021/06/18 PHP
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL