图像处理库Skimage安装与使用
2019-04-23 本文已影响0人
Byte猫
scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,是非常好的数字图像处理工具。其全称是scikit-image SciKit (toolkit for SciPy) ,对scipy.ndimage进行了扩展,提供了更多的图片处理功能。
skimage包由许多的子模块组成,各个子模块提供不同的功能。主要子模块如下:
子模块名称 | 主要实现功能 |
---|---|
io | 读取、保存和显示图片或视频 |
data | 提供一些测试图片和样本数据 |
color | 颜色空间变换 |
filters | 图像增强、边缘检测、排序滤波器、自动阈值等 |
draw | 操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等 |
transform | 几何变换或其它变换,如旋转、拉伸和拉东变换等 |
morphology | 形态学操作,如开闭运算、骨架提取等 |
exposure | 图片强度调整,如亮度调整、直方图均衡等 |
feature | 特征检测与提取等 |
measure | 图像属性的测量,如相似性或等高线等 |
segmentation | 图像分割 |
restoration | 图像恢复 |
util | 通用函数 |
安装
pip install scikit-image
使用Skimage
1、读取图像
from skimage import io
img = io.imread('test.png', as_gray=False) # 第一个参数是文件名可以是网络地址,第二个参数默认为False,True时为灰度图
注意:skimage的图片格式是(height,width,channel)
查看image文件的信息
print(type(img)) #显示类型
print(img.shape) #显示尺寸
print(img.dtype) #数据类型
print(img.shape[0]) #图片高度
print(img.shape[1]) #图片宽度
print(img.shape[2]) #图片通道数
print(img.max()) #最大像素值
print(img.min()) #最小像素值
print(img.mean()) #像素平均值
skimage读出来的图片可以直接img[0][0]获得,但是一定记住它的格式.
print(img[200][100])
skimage.io.imread打开的图片类型为np数组, 值为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转为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数组存在的。因此对numpy数组的一切功能,对图片也适用。对数组元素的访问,实际上就是对图片像素点的访问。
输出小猫图片的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、图像裁剪
通过对数组的裁剪,就可以实现对图片的裁剪。
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()