python浮点型数据怎么显示为图片_python数字图像处理(4):图像数据类型及颜色空间转换...
一、圖像數據類型及轉換
在skimage中,一張圖片就是一個簡單的numpy數組,數組的數據類型有很多種,相互之間也可以轉換。這些數據類型及取值范圍如下表所示:
Data typeRange
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
一張圖片的像素值范圍是[0,255], 因此默認類型是unit8, 可用如下代碼查看數據類型:
from skimage importio,data
img=data.chelsea()print(img.dtype.name)
在上面的表中,特別注意的是float類型,它的范圍是[-1,1]或[0,1]之間。一張彩色圖片轉換為灰度圖后,它的類型就由unit8變成了float
1、unit8轉float
from skimage importdata,img_as_float
img=data.chelsea()print(img.dtype.name)
dst=img_as_float(img)print(dst.dtype.name)
輸出:
uint8
float64
2、float轉uint8
from skimage importimg_as_ubyteimportnumpy as np
img= np.array([0, 0.5, 1], dtype=float)print(img.dtype.name)
dst=img_as_ubyte(img)print(dst.dtype.name)
輸出:
float64
uint8
float轉為unit8,有可能會造成數據的損失,因此會有警告提醒。
除了這兩種最常用的轉換以外,其實有一些其它的類型轉換,如下表:
Function nameDescription
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型。
所有的顏色空間轉換函數,都放在skimage的color模塊內。
例:rgb轉灰度圖
from skimage importio,data,color
img=data.lena()
gray=color.rgb2gray(img)
io.imshow(gray)
其它的轉換,用法都是一樣的,列舉常用的如下:
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 importio,data,color
img=data.lena()
hsv=color.convert_colorspace(img,'RGB','HSV')
io.imshow(hsv)
在color模塊的顏色空間轉換函數中,還有一個比較有用的函數是
skimage.color.label2rgb(arr), 可以根據標簽值對圖片進行著色。以后的圖片分類后著色就可以用這個函數。
例:將lena圖片分成三類,然后用默認顏色對三類進行著色
from skimage importio,data,colorimportnumpy as np
img=data.lena()
gray=color.rgb2gray(img)
rows,cols=gray.shape
labels=np.zeros([rows,cols])for i inrange(rows):for j inrange(cols):if(gray[i,j]<0.4):
labels[i,j]=0elif(gray[i,j]<0.75):
labels[i,j]=1
else:
labels[i,j]=2dst=color.label2rgb(labels)
io.imshow(dst)
總結
以上是生活随笔為你收集整理的python浮点型数据怎么显示为图片_python数字图像处理(4):图像数据类型及颜色空间转换...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国寿安鑫利365天会亏本金吗?从三方面分
- 下一篇: 对比:国寿安鑫利365天和建信养老飞越3