Python图像读取与数据类型转换详解:uint8与float处理

Ryan
Ryan
发布时间:2026-10-15| 2人浏览过
原创

本文详细解析Python中不同库读取图像时的数据类型差异,重点讲解uint8与float64之间的转换方法。通过对比skimage和imageio的读取结果,提供无损转换代码示例,帮助开发者避免数据溢出与图像失真问题。

前言:关于uint8和float型数据

为了节省存储空间,图像通常以uint8(8位无符号整数)这种特殊数据类型进行存储,这类图像被称为8位图像。

使用imread读取灰度图像时,数据会被存入8位矩阵;若为RGB图像,则存入8位RGB矩阵中。

因此,通过Matlab及各类Python包(如skimage、imageio)读入的图像数据类型均为uint8。在后续数据运算中,若不转换为double格式,计算过程可能会产生溢出错误。

总结而言,需牢记一条原则:uint8用于图像的存储和显示(如imshow),而double(或float)格式用于数值运算。

一、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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。