关于python中不同函数读取图片格式的区别浅析

 更新时间:2022年03月17日 09:31:33   作者:东写西读李老湿  
这篇文章主要给大家介绍了关于python中不同函数读取图片格式的区别,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言:关于uint8和float型数据

为了节省存储空间,图像一般存储在一种特殊的数据类型——uint8(8位无符号整数)中,以此方式存储的图像称作8位图像。

imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。

因此,通过matlab以及各种python包(skimage,imageio)读入图像的数据类型都是uint8的,而在数据运算中,如果不转换成double格式,计算可能会产生溢出。

总之先记住一句话:uint8用来存储和显示(imshow),double用来运算。

一、skimage.io。

读取方法: skimage.io.imread('图片地址')

返回的格式是uint8格式的数组。

二、imageio

读取方法: imageio.imread('图片地址').

返回的格式是一个imageio.core.util.Image类,其里边的元素也是uint8格式的。

以上两种类型均可以通过skimage.img_as_float转换成float64格式的图片。

转换公式为::

元素转换前后对比: 67(uint8) →→→ 0.2627(float64)。

在程序中的相互转换:

1)把uint8转换成float

转换成float64。只需要利用skimage.img_as_float()函数即可。

如果需要转换成float32格式,在float64的基础上加上:.astype(np.float32)即可。

示例:

img = skimage.img_as_float(img)#从uint8转换成float364
img = skimage.img_as_float(img).astype(np.float32)#从uint8转换成float32

2)把float64转换成uint8

这是目前来说找到的既能达到目的又不使图像失真的方法了:分别利用skimage包和numpy中的函数进行转换,如果直接用numpy函数进行转换,会使图像失真。

img = skimage.img_as_float(img)#先转换成uint16的格式。
img = np.uint8(img)#再转换成uint8的格式。

总结:以上的转换中可以看出:能用图形处理包的格式转换函数就别用numpy中的格式转换函数,否则会出现各种各样的问题。

附:不同数据类型的对比:

Data typerange
uint80 to 255
uint160 to 65535
uint320 to 232
float-1 to 1 or 0 to 1
int8-128 to 127
int16-32768 to 32767
int32-231 to 231 - 1

补充:python处理图像转化为uint8格式

在python图像处理过程中,遇到的RGB图像的值是处于0-255之间的,为了更好的处理图像,通常会将图像值转变到0-1之间

这个处理的过程就是图像的uint8类型转变为float类型过程。img.astype('uint8')/255

float类型取值范围 :-1 到1 或者 0到1

总结

到此这篇关于python中不同函数读取图片格式的区别的文章就介绍到这了,更多相关python读取图片格式的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python最大连续区间和动态规划

    Python最大连续区间和动态规划

    这篇文章主要介绍了Python最大连续区间和动态规划,文章围绕Python最大连续区间和动态规划的相关资料展开内容,需要的小伙伴可以参考一下
    2022-01-01
  • python线程的几种创建方式详解

    python线程的几种创建方式详解

    这篇文章主要介绍了python线程的几种创建方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python3简单实现串口通信的方法

    Python3简单实现串口通信的方法

    今天小编就为大家分享一篇Python3简单实现串口通信的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python实战之实现获取动态图表

    Python实战之实现获取动态图表

    这篇文章主要介绍了利用Python实现动态化图表,文中的示例代码介绍详细,对我们的工作或学习有一定的价值,感兴趣的同学可以学习一下
    2021-12-12
  • 人工智能最火编程语言 Python大战Java!

    人工智能最火编程语言 Python大战Java!

    开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。本文为大家提供作者的答案并解释原因
    2017-11-11
  • 利用 Monkey 命令操作屏幕快速滑动

    利用 Monkey 命令操作屏幕快速滑动

    Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常
    2016-12-12
  • Python求字符串的长度示例代码

    Python求字符串的长度示例代码

    这篇文章主要介绍了Python求字符串的长度,求一个字符串的长度,在main函数中输入字符串,并输出其长度,文中给大家介绍了Python计算字符串长度的函数,需要的朋友可以参考下
    2023-02-02
  • python实现K最近邻算法

    python实现K最近邻算法

    这篇文章主要为大家详细介绍了python实现K最近邻算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • python3 pandas 读取MySQL数据和插入的实例

    python3 pandas 读取MySQL数据和插入的实例

    下面小编就为大家分享一篇python3 pandas 读取MySQL数据和插入的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python 可迭代对象 iterable的具体使用

    Python 可迭代对象 iterable的具体使用

    本文主要介绍了Python可迭代对象iterable,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论