美文网首页Python数字图像处理Opencv-Python
Python数字图像处理(4):图像数据类型以及颜色空间转换

Python数字图像处理(4):图像数据类型以及颜色空间转换

作者: 自律小生 | 来源:发表于2017-02-26 19:43 被阅读1917次

一、数字图像类型以及转换

在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

一张图片的像素范围是[0, 255],所以类型是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 = 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):图像数据类型以及颜色空间转换

    一、数字图像类型以及转换 在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之...

  • Python下的图像处理库,你选哪个?

    在进行数字图像处理时,我们经常需要对图像进行读取、保存、缩放、裁剪、旋转、颜色转换等基本操作。在使用python进...

  • 数字图像处理的基本原理和常用方法

    数字图像处理的基本原理和常用方法 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。图像处理...

  • 《数字图像处理与分析》学习笔记 1

    第一章:图像处理的基本知识 1.1数字图像处理概述 【1、数字图像处理及其特点】 1.图像与数字图像 图像是自然界...

  • 数字图像处理的分类

      根据对图像处理的不同目的,数字图像处理可以分为3类: 1、改善图像质量:   如进行图像的亮度和颜色变换,增强...

  • 数字图像处理

    数字图像处理主要再两个领域,这里介绍空间域的处理操作。空间域:根据图像像元数据的空间表示 f(x,y)进行处理变换...

  • OpenCV+Python 频域分析

    参考: opencv-python官方文档《刚萨雷斯数字图像处理(MATLAB版)》 图像处理中的傅里叶变换 二维...

  • python skimage图像处理(一)

    本文转自 python数字图像处理 基于python脚本语言开发的数字图片处理包,比如PIL,Pillow, op...

  • 机器/视觉/六十讲(课程一)

    第一章 图像处理 01、数字图像概述 像素是数字图像的基本元素。像素是在模拟图像数字化时对连续空间离散化得到的。 ...

  • cvtColor(颜色空间转换)

    概念 用于将图像从一个颜色空间转换到另一个颜色空间的转换,比如将彩色图像转换为灰度图像等。 函数讲解 ●函数原型○...

网友评论

    本文标题:Python数字图像处理(4):图像数据类型以及颜色空间转换

    本文链接:https://www.haomeiwen.com/subject/aigowttx.html