scikit-image是基于scipy的一款圖像處理包,它將圖片作為numpy數(shù)組進行處理,是非常好的數(shù)字圖像處理工具。其全稱是scikit-image SciKit (toolkit for SciPy) ,對scipy.ndimage進行了擴展,提供了更多的圖片處理功能。
skimage包由許多的子模塊組成,各個子模塊提供不同的功能。主要子模塊如下:
| 子模塊名稱 | 主要實現(xiàn)功能 |
|---|---|
| io | 讀取、保存和顯示圖片或視頻 |
| data | 提供一些測試圖片和樣本數(shù)據(jù) |
| color | 顏色空間變換 |
| filters | 圖像增強、邊緣檢測、排序濾波器、自動閾值等 |
| draw | 操作于numpy數(shù)組上的基本圖形繪制,包括線條、矩形、圓和文本等 |
| transform | 幾何變換或其它變換,如旋轉(zhuǎn)、拉伸和拉東變換等 |
| morphology | 形態(tài)學(xué)操作,如開閉運算、骨架提取等 |
| exposure | 圖片強度調(diào)整,如亮度調(diào)整、直方圖均衡等 |
| feature | 特征檢測與提取等 |
| measure | 圖像屬性的測量,如相似性或等高線等 |
| segmentation | 圖像分割 |
| restoration | 圖像恢復(fù) |
| util | 通用函數(shù) |
安裝
pip install scikit-image
使用Skimage
1、讀取圖像
from skimage import io
img = io.imread('test.png', as_gray=False) # 第一個參數(shù)是文件名可以是網(wǎng)絡(luò)地址,第二個參數(shù)默認為False,True時為灰度圖
注意:skimage的圖片格式是(height,width,channel)
查看image文件的信息
print(type(img)) #顯示類型
print(img.shape) #顯示尺寸
print(img.dtype) #數(shù)據(jù)類型
print(img.shape[0]) #圖片高度
print(img.shape[1]) #圖片寬度
print(img.shape[2]) #圖片通道數(shù)
print(img.max()) #最大像素值
print(img.min()) #最小像素值
print(img.mean()) #像素平均值
skimage讀出來的圖片可以直接img[0][0]獲得,但是一定記住它的格式.
print(img[200][100])
skimage.io.imread打開的圖片類型為np數(shù)組, 值為0-255,尺寸為 H,W,C,resize后值為0-1
image = transform.resize(img, (100, 200), order=1)
print(skimage.img_as_float(image)) # img_as_float可以把image轉(zhuǎn)為double,即float64
2、圖像顯示
方法一:skimage.io.imshow()顯示圖像
from skimage import io,data
import matplotlib.pyplot as plt
img = data.coffee()
io.imshow(img) # 顯示圖片
#io.imsave('test1.jpg', img) # 保存圖片
plt.show()
方法二:skimage.viewer.ImageViewer()顯示圖像
from skimage import io, data
from skimage.viewer import ImageViewer
img = data.coffee()
viewer = ImageViewer(img)
viewer.show()
skimage程序自帶了一些示例圖片,如果我們不想從外部讀取圖片,就可以直接使用skimage.data的示例圖片。
3、圖像像素訪問
圖片讀入程序中后,是以numpy數(shù)組存在的。因此對numpy數(shù)組的一切功能,對圖片也適用。對數(shù)組元素的訪問,實際上就是對圖片像素點的訪問。
輸出小貓圖片的G通道中的第20行30列的像素值
from skimage import io, data
import matplotlib.pyplot as plt
img = data.chelsea()
pixel = img[20,30,1]
print(pixel)
紅色單通道訪問
from skimage import io, data
import matplotlib.pyplot as plt
img = data.coffee()
R = img[:,:,0]
print(R)
io.imshow(R)
plt.show()
4、圖像裁剪
通過對數(shù)組的裁剪,就可以實現(xiàn)對圖片的裁剪。
from skimage import io, data
import matplotlib.pyplot as plt
img = data.coffee()
roi = img[80:180,100:200,:]
print(roi)
io.imshow(roi)
plt.show()