数字图像处理:python实现图像数据类型和颜色空间的转换(五)

实验一:图像数据类型和转换
在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)

run result:
在这里插入图片描述

###### 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)

run result:
在这里插入图片描述

参考和引用:

https://blog.csdn.net/denny2015/article/details/50523207

https://www.cnblogs.com/cing/p/8038055.html

仅用来个人学习和分享,如若侵权,留言立删。

尊重他人知识产权,不做拿来主义者!

喜欢的可以关注我哦QAQ,

你的关注就是我write博文的动力。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值