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

目录
  • 前言:关于uint8和float型数据
  • 一、skimage.io。
  • 二、imageio
  • 补充:python处理图像转化为uint8格式
  • 总结

前言:关于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 type range
uint8 0 to 255
uint16 0 to 65535
uint32 0 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读取图片格式的区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python读取图片并修改格式与大小的方法

    本文实例为大家分享了python读取图片并修改文件大小的具体代码,供大家参考,具体内容如下 # Author:NDK # -*- coding:utf-8 -*- from PIL import Image import os import cv2 import numpy as np import glob # old_dir = './test/' # def read_image(cwd, newpath): # for roots, dirs, files in os.walk(cwd)

  • Python读取图片属性信息的实现方法

    本文是利用Python脚本读取图片信息,有几个说明如下: 1.没有实现错误处理 2.没有读取所有信息,大概只有 GPS 信息.图片分辨率.图片像素.设备商.拍摄设备等 3.简单修改后应该能实现暴力修改图片的 GPS 信息 4.但对于本身没有 GPS 信息的图片,实现则非常复杂,需要仔细计算每个描述符的偏移量 脚本运行后,读取结果如下 脚本读取的信息 这里和 Windows 属性查看器读到的内容完全一致 图片信息1 图片信息2 源码如下 # -*- coding:utf-8 -*- import

  • python从网络读取图片并直接进行处理的方法

    本文实例讲述了python从网络读取图片并直接进行处理的方法.分享给大家供大家参考.具体实现方法如下: 下面的代码可以实现从网络读取一张图片,不需要保存为本地文件,直接通过Image模块对图片进行处理,这里使用到了cStringIO库,主要是把从网络读取到的图片数据模拟成本地文件. import urllib2 import Image import cStringIO def ImageScale(url,size): file = cStringIO.StringIO(urllib2.url

  • python实现读取并显示图片的两种方法

    在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. 显示图片 import matplotlib.pyplot as plt # plt 用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 import numpy as np lena = mpimg.imread('lena.png')

  • python读取和保存图片5种方法对比

    python读取和保存图片5种方法对比 python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块 方法一:利用 PIL 中的 Image 函数 这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array()函数 . 区别:np.array() 是深拷贝,np.asarray() 是浅拷贝 copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. copy.deepcopy 深拷贝 拷贝对象及其子对象

  • Python读取图片为16进制表示简单代码

    本文主要研究的是python读取jpg格式图片并显示为16进制的相关内容,具体如下. 代码: >>> aaa = open('C:\Users\Administrator\Desktop\java\watermarkphoto/2018119110506012.png','rb') >>> aaa.read() 读取的原图: 显示效果: 总结 一开始读取的图片稍微有点大,idle直接卡死,后来截取了一个小的图片,很快就显示出来. 以上就是本文关于Python读取图片为1

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

    目录 前言:关于uint8和float型数据 一.skimage.io. 二.imageio 补充:python处理图像转化为uint8格式 总结 前言:关于uint8和float型数据 为了节省存储空间,图像一般存储在一种特殊的数据类型——uint8(8位无符号整数)中,以此方式存储的图像称作8位图像. imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中. 因此,通过matlab以及各种python包(skimage,imageio)读入图像的数据类型都是uint

  • Python用imghdr模块识别图片格式实例解析

    imghdr模块 功能描述:imghdr模块用于识别图片的格式.它通过检测文件的前几个字节,从而判断图片的格式. 唯一一个API imghdr.what(file, h=None) 第一个参数file可以是用rb模式打开的file对象或者表示路径的字符串和PathLike对象.h参数是一段字节串.函数返回表示图片格式的字符串. >>> import imghdr >>> imghdr.what('test.jpg') 'jpeg' 具体的返回值和描述如下: 返回值 描述

  • Python中文件的读取和写入操作

    从文件中读取数据 读取整个文件 这里假设在当前目录下有一个文件名为'pi_digits.txt'的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 with open('pi_digits.txt') as f: # 默认模式为'r',只读模式 contents = f.read() # 读取文件全部内容 print contents # 输出时在最后会多出一行(read()函数到达文件末会返回一个空字符,显示出空字符就是一个空行) print '

  • Python中的函数参数(位置参数、默认参数、可变参数)

    目录 一.位置参数 二.默认参数 三.可变参数 四.关键字参数 五.命名关键字参数 六.各种参数之间的组合 函数的参数:Python中函数定义非常简单,由于函数参数的存在,使函数变得非常灵活应用广泛:不但使得函数能够处理复杂多变的参数,还能简化函数的调用. Python中的函数参数有如下几种:位置参数.默认参数.可变参数.关键字参数和命名关键字参数 一.位置参数 位置参数(positional arguments)就是其他语言的参数,其他语言没有分参数的种类是因为只有这一种参数, 所有参数都遵循

  • Python中input()函数的用法实例小结

    目录 一:input()函数的输入机制 二:input()函数常涉及的强制类型转换 三:带提示的input()函数及其常见问题 四:利用input()一次性输入多个变量值 附:input()函数结果的强制转换 总结 一:input()函数的输入机制 我们编写的大部分程序,都需要读取输入并对其进行处理,而基本的输入操作是从键盘键入数据.Python从键盘键入数据,大多使用其内置的input()函数.但是,不同于程序设计初学者常接触的C和C++,我们不需要在输入之时规定变量的类型.相反,我们可以非常

  • python中open函数对文件处理的使用教程

    目录 1.open() 1.1 参数1 1.2 参数2 1.3 参数3 2.with open() as 3.open函数常用的方法 3.1 读 3.2 写 3.3 获取文件读写类型 3.4 指针移动 3.5 当前指针位置 3.6 truncate 总结 在python中使用open函数对文件进行处理. 1.open() python打开文件使用open()函数,返回一个指向文件的指针.该函数常用以下三个参数. 1.1 参数1 目标文件的路径+名字.最好使用r"路径"这种原始字符串写法

  • python中enumerate函数用法实例分析

    本文实例讲述了python中enumerate函数用法.分享给大家供大家参考.具体分析如下: 今日发现一个新函数 enumerate .一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写: for i in range (0,len(list)): print i ,list[i] 但是这种方法有些累赘,使用内置enumerrate函数会有更加直接,优美的做法,先看看enumerate的定义: def enumerate(collection): 'Generates an inde

  • Python中print函数简单使用总结

    print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法. 打开电脑,选择python软件,下面选择python 3.7为例进行介绍,点击python 3.7,就进入了python的命令行界面. python函数的格式是print(),然后再括号内输入想要在屏幕上面显示的内容,如果是数字等内容,可以直接输入print(a),如下图所示. 如果想连续输入内容,那么不同的变量之间可以用英文逗号隔开.如下图所示.比如想连续输出a,b,c,那么可以这样写

  • python中open函数的基本用法示例

    前言 本文主要介绍的是关于python中open函数用法的相关资料,用法如下: name = open('errname.txt','w')<br>name.readline()<br>name.close() 1.看下第一行的代码 用来访问磁盘中存放的文件,可以进行读写等操作,例如上例中 'w',这里便是对errname.txt这个文件进行读操作 例如: w:以写方式打开 a:以追加方式打开 r+:以读写模式打开 w+:以读写模式打开 rb:以二进制读模式打开 wb:以二进制写模

  • python中利用matplotlib读取灰度图的例子

    代码为: import matplotlib.pyplot as plt #用于显示图片 import matplotlib.image as mpimg # mpimg 用于读取图片 picdir = 'C:\\Users\\wyt\\Desktop\\test\\ship\\012400.jpg' img = mpimg.imread(picdir) plt.imshow(img) plt.title('Original train image') plt.show() 显示结果如下,是以热

随机推荐