真锋
永远保持一颗学习和专注的心
嵌入式视觉笔记

Python 数字图像处理-从 scikit-image 库开始学习

常用 Python 数字处理图像库

图像处理中的常见任务包括显示图像,基本操作如裁剪、翻转、旋转等,图像分割,分类和特征提取,图像恢复和图像识别。常用的基于 python 脚本语言开发的数字图片处理库有以下几种,比如 PIL,Pillow, opencv, scikit-image 等。(PIL 是针对 python2, pillow 是针对 python3,两者功能一样。)

Pillow 只提供最基础的数字图像处理,功能有限;opencv 实际上是一个 c++ 库,只是提供了 python 接口,更新速度非常慢。scikit-image 是基于 scipy 的一款图像处理库,它将图片表示为数组(NumPy arrays)进行处理,正好与matlab一样。Image 读出来的是 PIL 的类型。而skimage.io读出来的数据是numpy格式的,这方便我们与 TensorFlow 框架对接。因此,我最开始选择 scikit-image 进行数字图像处理。

注意本文只是简单的介绍了下 skimage 库的基本用法,包括子模块 data 和 io 加载图像并获取图像信息,更多信息请参考官网教程。

基本使用

模块导入

scikit-image 是一个将图像作为 numpy array 格式处理的 Python 包。该包被导入为 skimage。(为了方便,后续内容我只写简称 skimage)

>>> import skimage

子模块和函数列表

skimage包由许多的子模块组成,各个子模块提供不同的功能。主要子模块列表如下,这个网页提供了全部的子模块和函数列表。

skimage子模块列表

基本操作

在 skimage 子模块中,我们可以找到绝大多数数字图像处理的功能。对于读取外部图片并显示,skimage 提供了 io 子模块,顾名思义,这个模块是用来图片输入输出操作的。为了方便练习,skimage 提供 data 子模块,里面嵌套了一些示例图片,我们可以直接使用。

下面是 data 子模块的用法:

>>> from skimage import data    #导入data子模块
>>>  camera = data.camera()     #create camera image,return (512, 512) uint8 ndarray

一要记住,在 scikit-image 中,图像表示为 NumPy 阵列,例如用于灰度图像的为2-D(2维)矩阵。代码示例:

>> import skimage
>> from skimage import data  #create camera image,return (300, 451, 3) uint8 ndarray
>> camera = data.camera()
>> print(type(camera))       #显示图像的数据类型
>>> print(camera.shape)      #显示图像的尺寸

代码解释:skimage.data 子模块提供了一组返回示例图像的函数,可用于快速操作图像文件。也可以使用 skimage.io.imread()从外部文件中读取图像文件,并作为 Numpy数组加载。

>>> import os
>>> filename = os.path.join(skimage.data_dir, 'moon.png')
>>> from skimage import io
>>> moon = io.imread(filename)
>>> print('The image moon data\n',moon)

参考链接

http://scikit-image.org/docs/stable/user_guide/getting_started.html

赞赏

发表评论

textsms
account_circle
email

嵌入式视觉笔记

Python 数字图像处理-从 scikit-image 库开始学习
常用 Python 数字处理图像库 图像处理中的常见任务包括显示图像,基本操作如裁剪、翻转、旋转等,图像分割,分类和特征提取,图像恢复和图像识别。常用的基于 python 脚本语言开发的数…
扫描二维码继续阅读
2018-11-09