zoukankan      html  css  js  c++  java
  • python做基本的图像处理

    PIL是python中的图像处理类库,为python提供了基本的图像处理和基本操作。而PIL中最重要的就是Image模块,下面给出具体的例子来理解此模块。

    读取一幅图像

    • 我们用Image模块中的open()来实现.
      对于PNG,JPG和BMP等不同格式的彩色图像之间的转换都可以通过Image模块来完成,具体地说,在打开这些图像时,PIL会将他们解码为三通道的'RGB'图像,人们可以基于'RGB'图像进行处理。
    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    image=Image.open('D:/test.jpg')#读取图像
    plt.imshow(image)
    plt.show()#需要调用show()方法,不然图像只会在内存中而不显示出来

    png

    转化为灰度图像

    • 我们用convert()方法来实现图像的灰度转化。
      Convert()会根据传入参数的不同将图像变成不同的模式。PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
      其中,模式‘1’为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。
      模式‘L’为灰色图像它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
      L = R * 299/1000 + G * 587/1000+ B * 114/1000
      模式“P”为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。

    模式“RGBA”为32位彩色图像,它的每个像素用32个bit表示,其中24bit表示红色、绿色和蓝色三个通道,另外8bit表示alpha通道,即透明通道。

    模式“CMYK”为32位彩色图像,它的每个像素用32个bit表示。模式“CMYK”就是印刷四分色模式,它是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。

    模式“YCbCr”为24位彩色图像,它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。

    模式“RGB”转换为“YCbCr”的公式如下:
    Y= 0.257R+0.504G+0.098B+16
    Cb = -0.148
    R-0.291G+0.439B+128
    Cr = 0.439R-0.368G-0.071*B+128

    模式“I”为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“I”模式是按照下面的公式转换的:
    I = R * 299/1000 + G * 587/1000 + B * 114/1000

    模式“F”为32位浮点灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“F”模式是按照下面的公式转换的:
    F = R * 299/1000+ G * 587/1000 + B * 114/1000

    • 我们以灰度图像为例,将目标图像转换成灰度图像,由上可知,我们要给convert()方法传入参数“L”,具体代码如下:
    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.cm as cm   #cm是colormap的缩写
    image_gray=Image.open('D:/test.jpg').convert("L")
    data=np.array(image_gray)  #在显示灰度图像时array()方法将图像转换成Numpy的数组对象,图片得以显式,否则会出现错误
    plt.imshow(data,cmap=cm.gray)# cmap:代表颜色图谱,默认绘制为RGB(A)颜色空间。
    plt.show()

    png

    转换图像的格式

    • 通过save()方法,PIL可以将图像保存成多种格式的文件,当传入不同的扩展名时,它会根据扩展名自动转换图像的格式。
    from PIL import Image
    image=Image.open('D:/test.jpg')#打开jpg图像文件
    image.save('D:/train.jpg')#保存图像,并转换成png格式
    #读取转换的train.png图像
    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    image=Image.open('D:/train.png')
    plt.imshow(image)
    plt.show()

    png

    创建缩略图

    • thumbnail()方法接受一个一元组参数,分别对应着缩略图的宽高,在缩略时,函数会保持图片的宽高比例,如果输入的参数宽高和原图宽高比不同,则会依据最小对应边进行于按比例缩放。
      比如:一张图片为300*420大小的图片,当参数为(200,200)时,生成的缩略图大小为71*100,保持原图的宽高比

    裁剪图像区域

    • 使用PIL中的crop()方法可以从一幅图像中裁剪指定区域,该区域使用四元组来指定,四元组的坐标依次是(左,上,右,下)PIL中指定坐标系的左上角坐标为(0,0).
    from PIL import Image
    import matplotlib.pyplot as plt
    import numpy as np
    image=Image.open('D:/test.jpg')
    box=(500,500,2500,2500)
    region=image.crop(box)
    data=np.array(region)
    plt.imshow(data)
    plt.show()

    png

    调整尺寸和旋转

    • 我们用resize()方法来调整一幅图像的尺寸,该方法的参数是一个元组,用来指定新图像的大小:例如 out=image.resize((32,32))
    • 要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后用rotate()方法
    from PIL import Image
    import matplotlib.pyplot as plt
    image=Image.open('D:/test.jpg')#读取图像
    plt.imshow(image.rotate(180))#逆时针旋转180度
    plt.show()#需要调用show()方法,不然图像只会在内存中而不显示出来

    png

    出处:https://www.cnblogs.com/LouieZhang/p/8529241.html

  • 相关阅读:
    Squirrel GUI+ Phoenix 连接Hbase
    Hadoop_Hbase集群完全离线安装[CDH 5.13.1]
    cmake生成Makefile时指定c/c++编译器
    一步一步搭建:spark之Standalone模式+zookeeper之HA机制
    linux 安装nginx
    string和json转换的简单应用
    RHEL7 添加用户,含sudo权限
    RHEL7 Ansible
    RHEL安装docker-compose
    博客园仿github的markdown样式
  • 原文地址:https://www.cnblogs.com/mq0036/p/8547594.html
Copyright © 2011-2022 走看看