• pillow库,PIL库


    PIL:Python Imaging Libaray  PIL库是python图像处理库

    但是PIL仅仅支持到Python2.7,一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x

    安装Pillow库:pip install pillow

    但是导入包的时候还是:导入PIL这个库中的Image模块

    1. import PIL
    2. from PIL import Image

    1.打开图片:Image.open()

    1. from PIL import Image
    2. image=Image.open(r"D:\4.jpg")

    2.展示图片

    1. from PIL import Image
    2. image=Image.open(r"D:\4.jpg")
    3. image.show()
     
    

     3.保存图片:

    1. from PIL import Image
    2. image=Image.open(r"D:\4.jpg")
    3. image.save("D:\linzhiling.jpg")

    4.输出图片的size和mode

    (1)Rgb图像

    1. from PIL import Image
    2. image1=Image.open(r"D:\4.jpg")
    3. print(image1.size)#(1680, 1050)
    4. print(image1.mode)#RGB

    (2)灰度图像

    1. image2=Image.open(r"D:\2.jpg")
    2. print(image2.size)#(457, 783)
    3. print(image2.mode)#L

    mode表示图片的模式,RGB表示彩色图像,L代表灰度图

    size 属性为图片的大小(宽度,长度),无论是彩色图还是灰度图都是返回(xxx,xxx),也就是说不会返回通道数

    5.rgb图和灰度图互相转化

    (1)rgb图转化成灰度图

    1. image1=Image.open(r"D:\4.jpg")
    2. print(image1.size)#(1680, 1050)
    3. print(image1.mode)#RGB
    4. image2=image1.convert("L")
    5. image2.show()

    (2)灰度图转彩色图

    1. image2=Image.open(r"D:\2.jpg")
    2. print(image2.size)#(457, 783)
    3. print(image2.mode)#L
    4. image3=image2.convert("RGB")
    5. print(image3.size)#(457, 783)
    6. print(image3.mode)#RGB
    7. image3.show()

    和cv2库的灰度图一样,虽然转成了三通道的图,但是看起来还是和灰度图一摸一样

     6.图片缩放resize

    1. image1=Image.open(r"D:\4.jpg")
    2. print(image1.size)#(1680, 1050)
    3. print(image1.mode)#RGB
    4. image2=image1.resize((256,256))
    5. image2.show()

    7.图片旋转:

    1. im = image.rotate(45) # 逆时针旋转 45 度
    2. im = image.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
    3. im = im.transpose(Image.FLIP_TOP_BOTTOM)# 上下翻转

    8.对每个像素值进行操作

    1. image1=Image.open(r"D:\4.jpg")
    2. print(image1.size)#(1680, 1050)
    3. print(image1.mode)#RGB
    4. image2=image1.point(lambda i:i*5)#所有像素点都乘以5
    5. image2.show()

    原图:

     代码运行后:

     比较常见的应用是将一张0/1二值图变成0/255二值图:

    比如这样一张图:

     运行下面代码后:

    1. image2=Image.open(r"D:\Test.png")
    2. print(image2.size)#(457, 783)
    3. print(image2.mode)#L
    4. image3=image2.point(lambda i:i*255)
    5. image3.show()

    得到:

     其他两种实现将一张0/1二值图变成0/255二值图的方法参见本人另一篇博客:一张单通道的二值图(0,1二值图)转化为单通道二值图(0,255)二值图_Pr Young的博客-CSDN博客

    9. 图片和Numpy数组之间相互转化:

    (1)图片转数组

    1. image2=Image.open(r"D:\4.jpg")
    2. print(image2.size)#(1680,1050)
    3. print(image2.mode)#RGB
    4. array = np.array(image2)
    5. print(array.shape) #(1050, 1690, 3)

    (2)数组转图片

    1. image2=Image.open(r"D:\4.jpg")
    2. print(image2.size)#(1680,1050)
    3. print(image2.mode)#RGB
    4. array = np.array(image2)
    5. print(array.shape) #(1050, 1690, 3)
    6. out = Image.fromarray(array)
    7. out.show()

  • 相关阅读:
    ICEM使用经验与网格划分错误分析
    零基础转行网络安全可以做什么工作,内附网络安全自学路线
    C++-ffmpeg-2-1-RGB-YUV内存中的存储+SDL2对其渲染
    办公环境中最常用的邮箱是什么?
    【分治算法】Hanoi塔问题Python实现
    SAMBA共享工具安装
    C++之static
    HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)
    小小开发板承载万千创新可能,小熊派的云上奇遇记
    Dubbo可以代替Feign、Hystrix、Sentinel,Ribbon?
  • 原文地址:https://blog.csdn.net/weixin_47414034/article/details/125451215