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 相关文章推荐
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
Django csrf 验证问题的实现
Oct 09 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
Python搭建HTTP服务过程图解
Dec 14 Python
python程序输出无内容的解决方式
Apr 09 Python
pyspark 随机森林的实现
Apr 24 Python
Python实现SMTP邮件发送
Jun 16 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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 数组教程 定义数组
2009/10/23 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
php异常处理捕获错误整理
2019/09/23 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
通过实例解析Python return运行原理
2020/03/04 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
python如何调用百度识图api
2020/09/29 Python
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
2014年度考核工作总结
2014/12/24 职场文书
毕业设计论文致谢词
2015/05/14 职场文书