>>> from env_helper import info; info()
页面更新时间: 2023-04-15 20:58:06
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-7-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.2. 图像的读取、显示与保存

skimage提供了 io 模块,顾名思义,这个模块是用来图片输入输出操作的。 为了方便练习,skimage 提供一个 data 模块,里面自带了一些示例图片可以直接使用。

引入skimage模块可用:

>>> from skimage import io

1.2.1. 从外部读取图片并显示

读取单张彩色 RGB 图片,使用skimage.io.imread(fname) 函数,带一个参数,表示需要读取的文件路径。

>>> img=io.imread('demo_skimg_01.png')

显示图片使用 skimage.io.imshow(arr) 函数,带一个参数,表示需要显示的arr数组(读取的图片以numpy数组形式计算)。

>>> io.imshow(img)
<matplotlib.image.AxesImage at 0x7f8c72351590>

读取单张灰度图片,使用 skimage.io.imread(fname,as_grey=True) 函数, 第一个参数为图片路径,第二个参数为 as_grey , bool 型值,默认为 False

>>> img=io.imread('demo_skimg_01.png',as_gray=True)
>>> io.imshow(img)
<matplotlib.image.AxesImage at 0x7f1cc2f335d0>
_images/sec02_io_8_1.png

1.2.2. 程序自带图片

skimage程序自带了一些示例图片,如果我们不想从外部读取图片,就可以直接使用这些示例图片:

a stronaut

宇 航员图片

coffee

一杯 咖啡图片

lena

lena 美女图片

camera

拿相机 的人图片

coins

硬币图片

moon

月亮图片

chec kerboard

棋盘图片

horse

马图片

page

书页图片

chelsea

小猫图片

h ubble_de ep_field

星空图片

text

文字图片

clock

时钟图片

immu nohistoc hemistry

结肠图片

显示这些图片可用如下代码,不带任何参数:

>>> from skimage import io,data
>>> img=data.coffee()
>>> io.imshow(img)
<matplotlib.image.AxesImage at 0x7f1cc2fab510>
_images/sec02_io_10_1.png

图片名对应的就是函数名,如 camera 图片对应的函数名为 camera()

这些示例图片存放在skimage的安装目录下面, 路径名称为 data_dir

>>> from skimage import data_dir
>>> data_dir
'/usr/lib/python3/dist-packages/skimage/data'

也就是说,下面两行读取图片的代码效果是一样的:

>>> img1=data.coffee()
>>> img2=io.imread(data_dir+'/coffee.png')

上面两行代码,都是读取 coffee 图片。

1.2.3. 保存图片

使用 io 模块的 imsave(fname,arr) 函数来实现。 第一个参数表示保存的路径和名称,第二个参数表示需要保存的数组变量。

>>> from skimage import io,data
>>> img=data.chelsea()
>>> io.imshow(img)
>>> io.imsave('/tmp/demo_skimg_cat.jpg',img)
_images/sec02_io_17_0.png

保存图片的同时也起到了转换格式的作用。如果读取时图片格式为jpg图片,保存为png格式,则将图片从jpg图片转换为png图片并保存。

1.2.4. 图片信息

在一些IDE中,可以直接看到图片的一些信息,如 Spyer 。

以代码的方式,可以通过下面的方式来打印查看: 也可以直接以程序方式打印输出

>>> img=data.chelsea()
>>> 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()) #像素平均值
<class 'numpy.ndarray'>
(300, 451, 3)
300
451
3
405900
231
0
115.30514166050752