python数字图像处理数据类型及颜色空间转换


Posted in Python onJune 28, 2022

一、图像数据类型及转换

在skimage中,一张图片就是一个简单的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

一张图片的像素值范围是[0,255], 因此默认类型是unit8, 可用如下代码查看数据类型:

from skimage import io,data
img=data.chelsea()
print(img.dtype.name)

在上面的表中,特别注意的是float类型,它的范围是[-1,1]或[0,1]之间。一张彩色图片转换为灰度图后,它的类型就由unit8变成了float

1、unit8转float

from skimage import data,img_as_float
img=data.chelsea()
print(img.dtype.name)
dst=img_as_float(img)
print(dst.dtype.name)

输出:

uint8
float64

2、float转uint8

from skimage import img_as_ubyte
import numpy as np
img = np.array([0, 0.5, 1], dtype=float)
print(img.dtype.name)
dst=img_as_ubyte(img)
print(dst.dtype.name)

输出:

float64
uint8

float转为unit8,有可能会造成数据的损失,因此会有警告提醒。

除了这两种最常用的转换以外,其实有一些其它的类型转换,如下表:

Function name Description
img_as_float Convert to 64-bit floating point.
img_as_ubyte Convert to 8-bit uint.
img_as_uint Convert to 16-bit uint.
img_as_int Convert to 16-bit int.

二、颜色空间及其转换

如前所述,除了直接转换可以改变数据类型外,还可以通过图像的颜色空间转换来改变数据类型。

常用的颜色空间有灰度空间、rgb空间、hsv空间和cmyk空间。颜色空间转换以后,图片类型都变成了float型。

所有的颜色空间转换函数,都放在skimage的color模块内。

例:rgb转灰度图

from skimage import io,data,color
img=data.lena()
gray=color.rgb2gray(img)
io.imshow(gray)

其它的转换

用法都是一样的,列举常用的如下:

skimage.color.rgb2grey(rgb)

skimage.color.rgb2hsv(rgb)

skimage.color.rgb2lab(rgb)

skimage.color.gray2rgb(image)

skimage.color.hsv2rgb(hsv)

skimage.color.lab2rgb(lab)

 实际上,上面的所有转换函数,都可以用一个函数来代替

skimage.color.convert_colorspace(arr, fromspace, tospace)

表示将arr从fromspace颜色空间转换到tospace颜色空间。

例:rgb转hsv

from skimage import io,data,color
img=data.lena()
hsv=color.convert_colorspace(img,'RGB','HSV')
io.imshow(hsv)

python数字图像处理数据类型及颜色空间转换

在color模块的颜色空间转换函数中,还有一个比较有用的函数是

skimage.color.label2rgb(arr), 可以根据标签值对图片进行着色。以后的图片分类后着色就可以用这个函数。

例:将lena图片分成三类,然后用默认颜色对三类进行着色

from skimage import io,data,color
import numpy as np
img=data.lena()
gray=color.rgb2gray(img)
rows,cols=gray.shape
labels=np.zeros([rows,cols])
for i in range(rows):
    for j in range(cols):
        if(gray[i,j]<0.4):
            labels[i,j]=0
        elif(gray[i,j]<0.75):
            labels[i,j]=1
        else:
            labels[i,j]=2
dst=color.label2rgb(labels)
io.imshow(dst)

python数字图像处理数据类型及颜色空间转换

以上就是python数字图像处理数据类型及颜色空间转换的详细内容,更多关于python图像数据类型颜色空间的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
python爬虫可以爬什么
Jun 16 Python
python数据分析之单因素分析线性拟合及地理编码
python可视化分析绘制带趋势线的散点图和边缘直方图
基于Python编写一个监控CPU的应用系统
如何基于python实现单目三维重建详解
python如何读取和存储dict()与.json格式文件
Jun 25 #Python
python运行脚本文件的三种方法实例
Jun 25 #Python
如何利用python创作字符画
You might like
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
JavaScript游戏之优化篇
2010/11/08 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JavaScript 数组的深度复制解析
2016/11/02 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
基于vue实现简易打地鼠游戏
2020/08/21 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
基于Django filter中用contains和icontains的区别(详解)
2017/12/12 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
python pandas 时间日期的处理实现
2019/07/30 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
python如何编写win程序
2020/06/08 Python
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
政治思想表现评语
2014/05/04 职场文书
中层干部培训方案
2014/06/16 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
小学生手册家长意见
2015/06/03 职场文书
JavaScript原型链详解
2021/11/07 Javascript