前言
使用 skimage 包多一点
skimage包的全称是scikit-image SciKit,内有许多子模块
子模块名称 | 主要实现功能 |
---|---|
io | 读取、保存和显示图片或视频 |
data | 提供一些测试图片和样本数据 |
color | 颜色空间变换 |
filters | 图像增强、边缘检测、排序滤波器、自动阈值等 |
draw | 操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等 |
transform | 几何变换或其它变换,如旋转、拉伸和拉东变换等 |
morphology | 形态学操作,如开闭运算、骨架提取等 |
exposure | 图片强度调整,如亮度调整、直方图均衡等 |
feature | 特征检测与提取等 |
measure | 图像属性的测量,如相似性或等高线等 |
segmentation | 图像分割 |
restoration | 图像恢复 |
util | 通用函数 |
1.导入 显示 保存图像
读取自带图像或读取外界图像,读入的图像是以numpy数组形式计算
读取自带图像:
from skimage import io, data
img = data.chelsea() #chelsea是skimage自带的图像
自带图像保存在skimage安装路径下,查看路径操作如下:
from skimage import data_dir
print(data_dir)
读取外界图像,使用skimage.io.imread(‘…’)函数
from skimage import io
img=io.imread('d:/dog.jpg',as_grey=True) # 打开灰度图片
#as_grey默认为False
显示图像
io.imshow(img) #需导入io子模块
保存图像
io.imsave('d:/cat.jpg',img)
#第一个参数表示保存的路径和名称,第二个参数表示需要保存的数组变量
io批量打开图像
# 例:打开c盘cc文件夹下所有jpg格式文件
dir = 'c:/1/*.jpg'
img = io.ImageCollection(dir)
2.查看图片信息
# img在上边已定义
print(type(img)) #显示类型
print(img.shape) #显示尺寸
print(img.shape[0]) #图片高度
print(img.shape[1]) #图片宽度
print(img.shape[2]) #图片通道数
print(img.size) #显示总像素个数
print(img.max()) #最大像素值
print(img.min()) #最小像素值
print(img.mean()) #像素平均值
print(img[0][0])#图像的像素值
3.彩色图像
彩色图像获得不同通道矩阵
R = img[:,:,0] #获得图像R通道,下类似
G = img[:,:,1]
B = img[:,:,2]
彩色图像转化为灰度图像
gray_img = color.rgb2gray(img) # color为skimage的子模块
4.直方图与均衡化
skimage库中以exposure模块计算
skimage.exposure.histogram(image, nbins=256)
histogram的NumBins值可以人为设定,在未指定该参数时,系统将基于图像的灰度分布自动计算NumBins的值。
numpy包中,也有计算直方图的函数histogram(),两者大同小义。
二者计算都返回一个tuple(hist, bins_…), 前一个数组是直方图的统计量,后一个数组是每个bin的相关值
import numpy as np
from skimage import exposure,data
image =data.camera()*1.0
hist1=np.histogram(image, bins=2) #用numpy包计算直方图
hist2=exposure.histogram(image, nbins=2) #用skimage计算直方图
print(hist1)
print(hist2)
输出
(array([107432, 154712], dtype=int64), array([ 0. , 127.5, 255. ]))
(array([107432, 154712], dtype=int64), array([ 63.75, 191.25]))
分成两个bin,每个bin的统计量是一样的,但numpy返回的是每个bin的两端的范围值,而skimage返回的是每个bin的中间值