skimage( scikit-image)库学习03

1. 图像数据类型及颜色空间转换

1.1 图像数据类型

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

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

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

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

1.2 数据类型转换

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

由uint8 转 float

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

由float 转 uint8

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

类型转换函数如下表:

Funcion name Descripition
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

2. 颜色空间及转换

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

一张图片的像素值范围是[0,255], 因此默认类型是unit8,常用的颜色空间灰度空间、rgb空间、hsv空间和cmyk空间。颜色空间转换以后,图片类型都变成了float型( 取值范围: [ -1,1]和[ 0,1]);

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

from skimage import io, data, color
img = data.chelsea()
gray = color.rgb2gray(img)
io.imshow(gray)
io.show()
#其他转化,用法一样,列举如下:
skimage.color.rgb2gray(img)
skimage.color.rgb2hsv(img)
skimage.color.rgb2lab(img)
skimage.color.gray2gray(gray)
skimage.color.hsv2rgb(hsv_img)
skimage.color.lab2rgb(lab_img)
以上所有转化函数都可以用一个函数来代替:
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)
io.show()

2.2 根据标签值对图像进行着色

在color模块的颜色空间转换函数中,还有一个比较有用的函数是skimage.color.label2rgb(arr), 可以根据标签值对图片进行着色。以后的图片分类后着色就可以用这个函数

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)
io.show()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(图像处理)