• python数字图像处理(2):图像的读取、显示与保存


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

    引入skimage模块可用:

    from skimage import io

    一、从外部读取图片并显示

    读取单张彩色rgb图片,使用skimage.io.imread(fname)函数,带一个参数,表示需要读取的文件路径。显示图片使用skimage.io.imshow(arr)函数,带一个参数,表示需要显示的arr数组(读取的图片以numpy数组形式计算)。

    from skimage import io
    img=io.imread('d:/dog.jpg')
    io.imshow(img)

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

    from skimage import io
    img=io.imread('d:/dog.jpg',as_grey=True)
    io.imshow(img)

    二、程序自带图片

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

    astronaut

    宇航员图片

    coffee

    一杯咖啡图片

    lena

    lena美女图片

    camera

    拿相机的人图片

    coins

    硬币图片

    moon

    月亮图片

    checkerboard

    棋盘图片

    horse

    马图片

    page

    书页图片

    chelsea

    小猫图片

    hubble_deep_field

    星空图片

    text

    文字图片

    clock

     时钟图片

    immunohistochemistry

    结肠图片

     

     

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

    from skimage import io,data
    img=data.lena()
    io.imshow(img)

    图片名对应的就是函数名,如camera图片对应的函数名为camera(). 这些示例图片存放在skimage的安装目录下面,路径名称为data_dir,我们可以将这个路径打印出来看看:

    from skimage import data_dir
    print(data_dir)

    显示为: D:Anaconda3libsite-packagesskimagedata

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

    from skimage import data_dir,data,io
    img1=data.lena()  #读取lean图片
    img2=io.imread(data_dir+'/lena.png')  #读取lena图片

    三、保存图片

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

    from skimage import io,data
    img=data.chelsea()
    io.imshow(img)
    io.imsave('d:/cat.jpg',img)

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

    四、图片信息

    如果我们想知道一些图片信息,可以在spyder编辑器的右上角显示:

    也可以直接以程序方式打印输出

    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()) #像素平均值

    结果输出:

    <class 'numpy.ndarray'>
    (300, 451, 3)
    300
    451
    3
    405900
    231
    0
    115.305141661

     

  • 相关阅读:
    bzoj4563: [Haoi2016]放棋子(错排+高精)
    bzoj1089 [SCOI2003]严格n元树(dp+高精)
    9.15NOIP模拟题
    洛谷 P2010 回文日期 题解
    洛谷 P1147 连续自然数和 题解
    洛谷 P1152 欢乐的跳 题解
    信息学奥赛一本通 高手训练1 统计方案数
    想学习找不到好的博客?看这里>>
    信息学奥赛一本通 高手训练1 游戏通关
    洛谷 P3398 仓鼠找sugar 题解
  • 原文地址:https://www.cnblogs.com/denny402/p/5121897.html
Copyright © 2020-2023  润新知