1 scikit-image安装与介绍

首先,安装scikit-image,在window中安装anaconda的前提下,可在dos命令行中利用conda install scikit-image直接进行安装,而在pycharm中则可以利用编辑器自动安装:File->Settings->Project->Project Interpreter选取自己的python编辑器,然后点击"+",如下图所示:

python 安装 qrcode 模块 python skimage安装_python

,接下来自己操作就OK了,然后写个example测试一下安装是否成功。 example one

from skimage import io
import matplotlib.pyplot as plt

img = io.imread('len.jpg')
plt.figure("lena.jpg")
plt.imshow(img)
plt.axis('off')
plt.show()

然后运行,显示图像则安装成功。

  • skimage包的子模块 skimage包的全称是scikit-image SciKit (toolkit for SciPy) ,它对scipy.ndimage进行了扩展,提供了更多的图片处理功能。它是由python语言编写的,由scipy 社区开发和维护。skimage包由许多的子模块组成,各个子模块提供不同的功能。主要子模块列表如下: 子模块名称  主要实现功能

io 读取、保存和显示图片或视频

data 提供一些测试图片和样本数据

color 颜色空间变换

filters 图像增强、边缘检测、排序滤波器、自动阈值等

draw 操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等

transform 几何变换或其它变换,如旋转、拉伸和拉东变换等

morphology 形态学操作,如开闭运算、骨架提取等

exposure 图片强度调整,如亮度调整、直方图均衡等

feature 特征检测与提取等

measure 图像属性的测量,如相似性或等高线等

segmentation 图像分割

restoration 图像恢复

util 通用函数


用到一些图片处理的操作函数时,需要导入对应的子模块,如果需要导入多个子模块,则用逗号隔开,如:

from skimage import io,data,color

2 图像读取,显示与保存

  • 读取,显示 skimage提供了io模块,顾名思义,这个模块是用来图片输入输出操作的,上面的example则是彩色图像读取与显示实例。 如果是灰度图像则,
io.imread('d:/dog.jpg',as_grey=True)
  • 保存
io.imsave('f:/save.jpg',img)

也可以直接打印图像的信息

from skimage import io,data
img=data.chelsea()
io.imshow(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()) #像素平均值

3 图像像素访问与裁剪

图片读入程序中后,是以numpy数组存在的。因此对numpy数组的一切功能,对图片也适用。对数组元素的访问,实际上就是对图片像素点的访问。

  • 彩色图片访问方式为:
img[i,j,c]

i表示图片的行数,j表示图片的列数,c表示图片的通道数(RGB三通道分别对应0,1,2)。坐标是从左上角开始。

  • 灰度图片访问方式为:
gray[i,j]
  • exp 1:输出len图片的G通道中的第20行30列的像素值
from skimage import io
img=io.imread('len.jpg')
pixel=img[20,30,1]
print(pixel)
  • exp 2:显示红色单通道图片
from skimage import io
import matplotlib.pyplot as plt

img=io.imread('len.jpg')
R=img[:,:,0]
plt.figure(r.L)
plt.imshow(R)
plt.axis('off')
plt.show()
  • exp 3:对len图片随机添加椒盐噪声
from skimage import io
import matplotlib.pyplot as plt
import numpy as np

img=io.imread('len.jpg')

#随机生成5000个椒盐
rows,cols,dims=img.shape
for i in range(5000):
    x=np.random.randint(0,rows)
    y=np.random.randint(0,cols)
    img[x,y,:]=255
plt.figure(exp3)
plt.imshow(img)
plt.axis('off')
plt.show()
  • exp 4:对len图片进行裁剪
from skimage import io
img=io.imread('len.jpg')
roi=img[80:180,100:200,:]
plt.figure(exp4)
plt.imshow(roi)
plt.axis('off')
plt.show()
  • exp 5:将lena图片进行二值化,像素值大于128的变为1,否则变为0
from skimage import io,color
import matplotlib.pyplot as plt
img=io.imread('len.jpg')
img_gray=color.rgb2gray(img)
rows,cols=img_gray.shape
for i in range(rows):
    for j in range(cols):
        if (img_gray[i,j]<=0.5):
            img_gray[i,j]=0
        else:
            img_gray[i,j]=1
plt.figure(exp5)
plt.imshow(img_gray)
plt.axis('off')
plt.show()
#这个例子,使用了color模块的rgb2gray()函数,将彩色三通道图片转换成灰度图。转换结果为float64类型的数组,范围为[0,1]之间。
  • exp 6:
from skimage import io
import matplotlib.pyplot as plt

img=io.imread('len.jpg')
reddish = img[:, :, 0] >170
img[reddish] = [0, 255, 0]
plt.figure(exp6)
plt.imshow(img)
plt.axis('off')
plt.show()
#这个例子先对R通道的所有像素值进行判断,如果大于170,则将这个地方的像素值变为[0,255,0], 即G通道值为255,R和B通道值为0。