Python数字图像处理(4):图像数据类型以及颜色空间转换
2018-03-05 13:13
375 查看
附转载链接:https://www.jianshu.com/p/84b825b9e8a3
一张图片的像素范围是[0, 255],所以类型是
关于上表,需要注意的是
1、unit8转换成float
2、float转换成unit8
float转为unit8,有可能会造成数据的损失,因此会有警告提醒。
除了这两种最常用的转换以外,其实有一些其它的类型转换,如下表:
常用的颜色空间有灰度空间、RGB空间、HSV空间和CMKY空间,颜色空间转换以后,数据类型都变成了float类型,所有的颜色空间转换函数都在skimage的color模块中。
例一:RGB图转换成灰度图
灰度小猫
其它的转换,用法都是一样的,列举常用的如下:
其实上面函数的功能都可以通过一个函数来代替:
表示将arr从fromspace颜色空间转换到tospace颜色空间。
比如我们可以用其实现小猫图像由RGB到HSV的转换:
在color模块中还有一个特别有用的函数:
例二、将小猫图片分三类并着色from skimage import io, data, color
import numpy as np
一、数字图像类型以及转换
在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换。这些数据类型及取值范围如下表所示:Data Type | Range |
---|---|
unit8 | 0 - 255 |
unit16 | 0 - 65535 |
unit32 | 0 - 2^32 |
float | -1 - 1 or 0 - 1 |
int8 | -128 to 127 |
int16 | -32768 to 32767 |
int32 | -2^32 - 2^32-1 |
unit8,可以通过以下代码查看图像的数据类型:
from skimage import io, data img = data.chelsea() print(img.dtype.name)输出为
unit8。
关于上表,需要注意的是
float类型,它的范围是[0, 1] 或者[-1, 1]。一张彩色图转换成灰度图之后就有
unit8变成了
float了。
1、unit8转换成float
from skimage import io, data, img_as_float img = data.chelsea() print(img.dtype.name) img_grey = cimg_as_float(img) print(img_grey.dtype.name)输出为:
uint8 float64
2、float转换成unit8
from skimage import img_as_ubyte import numpy as np img = np.array([[0.2], [0.5], [0.1]], dtype=float) print(img.dtype.name) img_unit8 = img_as_ubyte(img) print(img_unit8.dtype.name)输出为:
float64 uint8
float转为unit8,有可能会造成数据的损失,因此会有警告提醒。
除了这两种最常用的转换以外,其实有一些其它的类型转换,如下表:
函数名 | 功能 |
---|---|
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空间和CMKY空间,颜色空间转换以后,数据类型都变成了float类型,所有的颜色空间转换函数都在skimage的color模块中。
例一:RGB图转换成灰度图
from skimage import io, data, color image = data.chelsea() image_grey = color.rgb2gray(image) io.imshow(image_grey) io.show()输出:
灰度小猫
print(image.dtype.name, image_grey.dtype.name)
('uint8', 'float64')
其它的转换,用法都是一样的,列举常用的如下:
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 image = data.chelsea() image_hsv = color.convert_colorspace(image, 'RGB', 'HSV') io.imshow(image_hsv) io.show()输出我就不贴了,图片太吓人。。
在color模块中还有一个特别有用的函数:
skimage.color.label2rgb(arr),可以根据标签值对图片进行着色。
例二、将小猫图片分三类并着色from skimage import io, data, color
import numpy as np
image = data.chelsea() image_grey = color.rgb2gray(image) rows, cols = image_grey.shape labels 9810 = np.zeros([rows, cols]) for i in range(rows): for j in range(cols): if image_grey[i, j] >0.66: labels[i, j] = 0 elif image_grey[i, j] > 0.33: labels[i, j] = 1 else: labels[i, j] = 2 label_image = color.label2rgb(labels) io.imshow(label_image) io.show()输出为:
相关文章推荐
- python数字图像处理(4):图像数据类型及颜色空间转换
- python数字图像处理(4):图像数据类型及颜色空间转换
- 王亟亟的Python学习之路(三)-基础语法以及基本数据类型
- python学习3-python变量以及数据类型
- 王亟亟的Python学习之路(三)-基础语法以及基本数据类型
- Python 数据类型以及迭代器和生成器
- python基本数据类型list,tuple,set,dict用法以及遍历方法
- Python中复合数据类型(list,turple以及切片,循环等操作)
- python3的数据类型以及模块的含义
- C++与Python的混合编程-调用有参函数以及C++数据类型与Python数据类型间的转换
- Python---利用scipy.misc等库对jpg以及png等图像数据预处理(用于深度学习喂数据)
- Python简易爬虫以及嵌套数据类型
- 图像类型、MATLAB数据类型,以及类型之间的转换(一)
- python再复习(1)数据类型以及字符串
- python 函数定义和内置函数isinstance以及数据类型检查type的使用
- Python学习04_图像数据类型及颜色空间转换
- python笔记 - 数据类型以及类型信息的获取
- 细数Python中的数据类型以及他们的方法
- 图像类型、MATLAB数据类型,以及类型之间的转换(二)
- [opencv]图像处理的基本数据类型以及通道和维度理解