python存储16bit和32bit图像的实例

 更新时间:2018年12月05日 08:51:01   作者:Joy_Shen  
今天小编就为大家分享一篇python存储16bit和32bit图像的实例,具有的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

笔记:python中存储16bit和32bit图像的方法。

说明:主要是利用scipy库和pillow库,比较其中的不同。

'''
测试16bit和32bit图像的python存储方法
'''
import numpy as np
 
import scipy.misc
from PIL import Image
 
# 用已有的8bit和16bit图作存储测试
path16 = 'D:\Py_exercise\lena16.tif'
path8 = 'D:\Py_exercise\lena8.tif'
tif16 = scipy.misc.imread(path16)  #<class 'numpy.uint16'>
tif8 = scipy.misc.imread(path8)   #<class 'numpy.uint8'>
print(np.shape(tif16),type(tif16[0,0])) 
print(np.shape(tif8),type(tif8[0,0])) 
print()
 
save16 = 'D:\Py_exercise\lena16_save.tif'
save8 = 'D:\Py_exercise\lena8_save.tif'
scipy.misc.imsave(save16, tif16)   #--> 8bit
scipy.misc.imsave(save8, tif8)   #--> 8bit
 
 
# Create a mat which is 64 bit float
nrows = 512
ncols = 512
np.random.seed(12345)
y = np.random.randn(nrows, ncols)*65535 #<class 'numpy.float64'>
print(type(y[0,0]))
print()
 
# Convert y to 16 bit unsigned integers
z16 = (y.astype(np.uint16))    #<class 'numpy.uint16'>
print(type(z16[0,0]))
print()
 
# 用产生的随机矩阵作存储测试
save16 = 'D:\Py_exercise\lena16_save1.tif'
scipy.misc.imsave(save16, z16)     #--> 8bit
 
im = Image.frombytes('I;16', (ncols,nrows), y.tostring())
im.save('D:\Py_exercise\lena16_save21.tif') #--> 16bit
im = Image.fromarray(y)      
im.save('D:\Py_exercise\lena16_save22.tif') #--> 32bit
im = Image.fromarray(z16)      
im.save('D:\Py_exercise\lena16_save23.tif') #--> 16bit
 
# 归一化后的np.float64仍然存成了uint8
zNorm = (z16-np.min(z16))/(np.max(z16)-np.min(z16)) #<class 'numpy.float64'>
print(type(zNorm[0,0]))
save16 = 'D:\Py_exercise\lena16_save11.tif'
scipy.misc.imsave(save16, zNorm)    #--> 8bit
 
# 归一化后的np.float64直接转8bit或16bit都会超出阈值,要*255或*65535
# 如果没有astype的位数设置,会直接存成32bit
zImg = (zNorm*65535).astype(np.uint16) 
im = Image.fromarray(zImg)
im.save('D:\Py_exercise\lena16_save31.tif') #--> 16bit
im = Image.fromarray(zNorm)
im.save('D:\Py_exercise\lena16_save32.tif') #--> 32bit(0~1)

以上这篇python存储16bit和32bit图像的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python转换itertools.chain对象为数组的方法

    Python转换itertools.chain对象为数组的方法

    这篇文章主要介绍了Python转换itertools.chain对象为数组的方法,通过代码给大家介绍了itertools 的 chain() 方法,需要的朋友可以参考下
    2020-02-02
  • Python数据类型之Tuple元组实例详解

    Python数据类型之Tuple元组实例详解

    这篇文章主要介绍了Python数据类型之Tuple元组,结合实例形式分析了Python元组类型的概念、定义、读取、连接、判断等常见操作技巧与相关注意事项,需要的朋友可以参考下
    2019-05-05
  • Python类中__init__() 和self的详细解析

    Python类中__init__() 和self的详细解析

    self和__init__的语法学过Python的都清楚,但是靠死记硬背来迫使自己理解并不是个好办法,下面这篇文章主要给大家介绍了关于Python类中__init__() 和self的相关资料,需要的朋友可以参考下
    2022-12-12
  • Python黑魔法库安装及操作字典示例详解

    Python黑魔法库安装及操作字典示例详解

    这篇文章主要为大家介绍了Python中黑魔法库的安装及操作字典的示例详解,有需要的 朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • python连接mysql数据库示例(做增删改操作)

    python连接mysql数据库示例(做增删改操作)

    python连接mysql数据库示例,提供创建表,删除表,数据增、删、改,批量插入操作,大家参考使用吧
    2013-12-12
  • Python教程自己实现软件加密功能

    Python教程自己实现软件加密功能

    网上的加密软件不太安全,但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而强化自身的编程能力
    2021-09-09
  • python requests完成接口文件上传的案例

    python requests完成接口文件上传的案例

    这篇文章主要介绍了python requests完成接口文件上传的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python中使用正则表达式精准匹配IP地址的案例

    Python中使用正则表达式精准匹配IP地址的案例

    Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋友一起看看吧
    2025-04-04
  • pandas把dataframe转成Series,改变列中值的类型方法

    pandas把dataframe转成Series,改变列中值的类型方法

    下面小编就为大家分享一篇pandas把dataframe转成Series,改变列中值的类型方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python中用户输入与while循环详情

    Python中用户输入与while循环详情

    这篇文章主要介绍了Python中用户输入与while循环详情,,包括如何接收用户输入并进行处理,在程序满足一定的条件时让程序一直运行,通过获取用户输入并学会控制程序在用户想要结束时退出循环,即可编写出交互式程序,下文详细内容介绍,需要的朋友可以参考一下
    2022-03-03

最新评论