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计数排序和基数排序算法实例
Apr 25 Python
Python程序设计入门(1)基本语法简介
Jun 13 Python
python中常用的九种预处理方法分享
Sep 11 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
python3爬虫怎样构建请求header
Dec 23 Python
Python-while 计算100以内奇数和的方法
Jun 11 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
简单了解python的break、continue、pass
Jul 08 Python
pandas数据处理进阶详解
Oct 11 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 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开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
关于JavaScript中string 的replace
2013/04/12 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
three.js实现圆柱体
2018/12/30 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
python机器学习之神经网络(二)
2017/12/20 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
《圆明园的毁灭》教学反思
2014/02/28 职场文书
文艺晚会策划方案
2014/06/11 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang