>>> 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>
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>
图片名对应的就是函数名,如 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)
保存图片的同时也起到了转换格式的作用。如果读取时图片格式为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