Python模块_PyLibTiff读取tif文件的实例


Posted in Python onJanuary 13, 2020

Usage example (libtiff wrapper)

from libtiff import TIFF
# to open a tiff file for reading:
tif = TIFF.open('filename.tif', mode='r')
# to read an image in the currect TIFF directory and return it as numpy array:
image = tif.read_image()
# to read all images in a TIFF file:
for image in tif.iter_images(): # do stuff with image
# to open a tiff file for writing:
tif = TIFF.open('filename.tif', mode='w')
# to write a image to tiff file
tif.write_image(image)

Usage example (pure Python module)

from libtiff import TIFFfile, TIFFimage
# to open a tiff file for reading
tif = TIFFfile('filename.tif')
# to return memmaps of images and sample names (eg channel names, SamplesPerPixel>=1)
samples, sample_names = tiff.get_samples()
# to create a tiff structure from image data
tiff = TIFFimage(data, description='')
# to write tiff structure to file
tiff.write_file('filename.tif', compression='none') # or 'lzw'
del tiff # flushes data to disk
from libtiff import TIFF 
from scipy import misc 
 
##tiff文件解析成图像序列 
##tiff_image_name: tiff文件名; 
##out_folder:保存图像序列的文件夹 
##out_type:保存图像的类型,如.jpg、.png、.bmp等 
def tiff_to_image_array(tiff_image_name, out_folder, out_type):  
      
  tif = TIFF.open(tiff_image_name, mode = "r") 
  idx = 0 
  for im in list(tif.iter_images()): 
    # 
    im_name = out_folder + str(idx) + out_type 
    misc.imsave(im_name, im) 
    print im_name, 'successfully saved!!!' 
    idx = idx + 1 
  return 
 
##图像序列保存成tiff文件 
##image_dir:图像序列所在文件夹 
##file_name:要保存的tiff文件名 
##image_type:图像序列的类型 
##image_num:要保存的图像数目 
def image_array_to_tiff(image_dir, file_name, image_type, image_num): 
 
  out_tiff = TIFF.open(file_name, mode = 'w') 
   
  #这里假定图像名按序号排列 
  for i in range(0, image_num): 
    image_name = image_dir + str(i) + image_type 
    image_array = Image.open(image_name) 
    #缩放成统一尺寸 
    img = image_array.resize((480, 480), Image.ANTIALIAS) 
    out_tiff.write_image(img, compression = None, write_rgb = True) 
     
  out_tiff.close() 
  return

用opencv读取

import cv2


cv2.imread("filename",flags)
对于cv2,imread的关于通道数和位深的flags有四种选择:

IMREAD_UNCHANGED = -1#不进行转化,比如保存为了16位的图片,读取出来仍然为16位。
IMREAD_GRAYSCALE = 0#进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1。
IMREAD_COLOR = 1#进行转化为RGB三通道图像,图像深度转为8位
IMREAD_ANYDEPTH = 2#保持图像深度不变,进行转化为灰度图。
IMREAD_ANYCOLOR = 4#若图像通道数小于等于3,则保持原通道数不变;若通道数大于3则只取取前三个通道。图像深度转为8位
对于多通道TIFF图像,若要保证图像数据的正常读取,显然要选择IMREAD_UNCHANGED作为imread的flags设置值。

安装pylibtiff

##PIL使用

导入 Image 模块。然后通过 Image 类中的 open 方法即可载入一个图像文件。如果载入文件失败,则会引起一个 IOError ;若无返回错误,则 open 函数返回一个 Image 对象。现在,我们可以通过一些对象属性来检查文件内容,即:

>>> import Image
>>> im = Image.open("j.jpg")
>>> print im.format, im.size, im.mode
JPEG (440, 330) RGB

Image 类的实例有 5 个属性,分别是:

format: 以 string 返回图片档案的格式(JPG, PNG, BMP, None, etc.);如果不是从打开文件得到的实例,则返回 None。

mode: 以 string 返回图片的模式(RGB, CMYK, etc.);完整的列表参见 官方说明·图片模式列表

size: 以二元 tuple 返回图片档案的尺寸 (width, height)

palette: 仅当 mode 为 P 时有效,返回 ImagePalette 示例

info: 以字典形式返回示例的信息

函数概貌。

Reading and Writing Images : open( infilename ) , save( outfilename ) Cutting and Pasting and Merging Images :

crop() : 从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标

系统的原点(0, 0)是左上角。

paste() :

merge() :

>>> box = (100, 100, 200, 200)
 >>> region = im.crop(box)
 >>> region.show()
 >>> region = region.transpose(Image.ROTATE_180)
 >>> region.show()
 >>> im.paste(region, box)
 >>> im.show()

旋转一幅图片:

def roll(image, delta):
  "Roll an image sideways"

  xsize, ysize = image.size

  delta = delta % xsize
  if delta == 0: return image

  part1 = image.crop((0, 0, delta, ysize))
  part2 = image.crop((delta, 0, xsize, ysize))
  image.paste(part2, (0, 0, xsize-delta, ysize))
  image.paste(part1, (xsize-delta, 0, xsize, ysize))

  return image

几何变换

>>>out = im.resize((128, 128))           #
 >>>out = im.rotate(45)               #逆时针旋转 45 度角。
 >>>out = im.transpose(Image.FLIP_LEFT_RIGHT)    #左右对换。
 >>>out = im.transpose(Image.FLIP_TOP_BOTTOM)    #上下对换。
 >>>out = im.transpose(Image.ROTATE_90)       #旋转 90 度角。
 >>>out = im.transpose(Image.ROTATE_180)      #旋转 180 度角。
>>>out = im.transpose(Image.ROTATE_270)      #旋转 270 度角。

Image 类的 thumbnail() 方法可以用来制作缩略图。它接受一个二元数组作为缩略图的尺寸,然后将示例缩小到指定尺寸。

import os, sys
from PIL import Image

for infile in sys.argv[1:]:
  outfile = os.path.splitext(infile)[0] + ".thumbnail"
  if infile != outfile:
    try:
      im  = Image.open(infile)
      x, y = im.size
      im.thumbnail((x//2, y//2))
      im.save(outfile, "JPEG")
    except IOError:
      print "cannot create thumbnail for", infile

这里我们用 im.size 获取原图档的尺寸,然后以 thumbnail() 制作缩略图,大小则是原先图档的四分之一。同样,如果图档无法打开,则在终端上打印无法执行的提示。

PIL.Image.fromarray(obj, mode=None)

Creates an image memory from an object exporting the array interface (using the buffer protocol).

If obj is not contiguous, then the tobytes method is called and frombuffer() is used.

Parameters: 
obj ? Object with array interface
mode ? Mode to use (will be determined from type if None) See: Modes.
Returns: 
An image object.

New in version 1.1.6.

PIL文档

以上这篇Python模块_PyLibTiff读取tif文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
八大排序算法的Python实现
Jan 28 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
python中的计时器timeit的使用方法
Oct 20 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
通过cmd进入python的步骤
Jun 16 Python
Python 如何实现访问者模式
Jul 28 Python
Python如何解除一个装饰器
Aug 07 Python
Anaconda安装pytorch和paddle的方法步骤
Apr 03 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 #Python
Python timeit模块的使用实践
Jan 13 #Python
Python 列表的清空方式
Jan 13 #Python
Python SSL证书验证问题解决方案
Jan 13 #Python
python清空命令行方式
Jan 13 #Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 #Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 #Python
You might like
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
JavaScript中.min.js和.js文件的区别讲解
2019/02/13 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
JS实现星星海特效
2019/12/24 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
python实现读Excel写入.txt的方法
2018/04/29 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
晚归检讨书
2014/02/19 职场文书
周年庆促销方案
2014/03/15 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
四大名著读书笔记
2015/06/25 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android