实验一:图像数据类型和转换
在skimage库中,一张图片实际上就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换。数据类型列举如下:
uint8:0-28
uint16:0-216
uint32:0-232
float:[-1,1] or [0,1]
int8:[-27,27-1]
int16:[-215,215-1]
int32:[-231,232-1]
一张图片的像素值范围是[0,255]
因此默认类型是uint8
当然,我们可以用code实现查看图片类型:
from skimage import io,data
img = data.chelsea()
io.imshow(img)
print('picture type:',img.dtype.name)
run result:
float类型范围是[-1,1] or [0,1],一张彩色图片转换为灰度图后,它的类型就由uint8变成了float
##### unit8转float
from skimage import data,img_as_float
img = data.chelsea()
print(img.dtype.name)
img_temp = img_as_float(img) # img_as_float模块将uint8变成了float
print(img_temp.dtype.name)
###### float转uint8
from skimage import data,img_as_float
from skimage import img_as_ubyte
img = data.chelsea()
print(img.dtype.name)
img_temp = img_as_float(img) # img_as_float模块将uint8变成了float
print(img_temp.dtype.name)
dst = img_as_ubyte(img_temp) # img_as_ubyte模块将float变成了uint8
print(dst.dtype.name)
总结:
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型。
RGB—>灰度图:
##### RGB转灰度图
from skimage import io,data,color
img = data.chelsea()
grey = color.rgb2gray(img)
io.imshow(grey)
run result:
其它的转换,用法都是一样的,列举常用的如下:
skimage.color.rgb2grey(img)
skimage.color.rgb2hsv(img)
skimage.color.rgb2lab(img)
skimage.color.gray2rgb(img)
skimage.color.hsv2rgb(img)
实际上,上面的所有转换函数,都可以用一个函数来代替
skimage.color.convert_colorspace(arr, fromspace, tospace) # 表示将arr从fromspace颜色空间转换到tospace颜色空间。
#### rgb转hsv
from skimage import io,data,color
img = data.chelsea()
hsv = color.convert_colorspace(img,'RGB','HSV')
io.imshow(hsv)
run result:
在color模块的颜色空间转换函数中,还有一个比较有用的函数是:
skimage.color.label2rgb(arr)
可以根据标签值对图片进行着色。
例如:将小猫图片分成三类,然后用默认颜色对三类进行着色
###图片分成三类,然后用默认颜色对三类进行着色
from skimage import io,data,color
import numpy as np
img = data.chelsea()
print('start_picture:')
io.imshow(img)
grey = color.rgb2gray(img)
print('grey_picture;')
io.imshow(grey)
rows,cols = gray.shape
labels = np.zeros([rows,cols])
for i in range(rows):
for j in range(cols):
if(grey[i,j]<0.4):
labels[i,j]=0
elif(grey[i,j]<0.6):
labels[i,j]=1
else:
labels[i,j]=2
d = color.label2rgb(labels)
io.imshow(d)
参考和引用:
https://blog.csdn.net/denny2015/article/details/50523207
https://www.cnblogs.com/cing/p/8038055.html
仅用来个人学习和分享,如若侵权,留言立删。
尊重他人知识产权,不做拿来主义者!
喜欢的可以关注我哦QAQ,
你的关注就是我write博文的动力。