Skimage入门
现在课程有门课搞机器视觉,老师让我们玩玩OpenCV,想起之前接触过skimage,比较简洁。就温故而知新喽!
先理一下结构。
子模块名称 | 主要实现功能 |
---|---|
io | 读取、保存和显示图片或视频 |
data | 提供一些测试图片和样本数据 |
color | 颜色空间变换 |
filters | 图像增强、边缘检测、排序滤波器、自动阈值等 |
draw | 操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等 |
transform | 几何变换或其它变换,如旋转、拉伸和拉东变换等 |
morphology | 形态学操作,如开闭运算、骨架提取等 |
exposure | 图片强度调整,如亮度调整、直方图均衡等 |
feature | 特征检测与提取等 |
measure | 图像属性的测量,如相似性或等高线等 |
segmentation | 图像分割 |
restoration | 图像恢复 |
util | 通用函数 |
skimage里的图片数据存储格式为ndarray哦!
1.读取文件数据
skimage.data里有样例图片,可以直接拿来用。图片显示依赖于plt,不像opencv有独立的imshow出来的窗口
import matplotlib.pyplot as plt
from skimage import data
cat = data.chelsea()
print("shape:{}".format(cat.shape))
print(cat.min(), cat.max())
plt.imshow(cat)
plt.colorbar()
cat[10: 110, 10: 110, :] = [0, 255, 0]
plt.imshow(cat)
plt.show()
当然,要读取自己的图片也是ok的。
image = io.imread("s.png")
io.imsave('nice', image)
2.直方图操作
画直方图
这里当然也可以直接使用plt.hist()函数直接画
img = data.camera()
hist, bin_centers = exposure.histogram(img)
# hist是该统计点的总数,bin_centers是统计点
# shape为(256,)
plt.fill_between(bin_centers, hist)
plt.show()
直方图均衡
from skimage import exposure
equal = exposure.equalize_hist(img)
plt.hist(equal.flatten(), bins=256)
high_contrast = exposure.rescale_intensity(img, in_range=(10, 180))
# 加亮,提高对比度
3.滤波
from skimage.filters.rank import median
med1 = median(img, disk(3))
med2 = median(img, disk(5))
fig, axx = plt.subplots(ncols=3, figsize=(15, 10))
axx[0].imshow(img, cmap='gray')
axx[1].imshow(med1, cmap='gray')
axx[2].imshow(med2, cmap='gray')
fig.show()