python图像处理-pillow库知识点整理(一)


一、图像处理基本知识

图像色彩模式:
RGB:通过三种不同的颜色通道变化和叠加到各种颜色,其中:
R–(Red)红色 范围:0-255
G–(Green)绿色 范围:0-255
B–(Blue)蓝色 范围:0-255
颜色的RGB表示方法(值1,值2,值3)
红色的RGB表示(255,0,0) 绿色的RGB表示(0,255,0)
蓝色的RGB表示(0,0,255) 黄色的RGB表示(255,255,0)
白色的RGB表示(255,255,255) 黑色的RGB表示(0,0,0)

像素序列
数字图像可以看成一个整数序列,阵列中的元素称为像素(pixel)
每一个点表示一个像素,一个点包含3个字节的信息:(R,G,B),理论上我们只要操作每个点的这三个数字,就能实现任何的图形

二、打开显示图片

# 1.使用下列语句导入PIL库,导入Image模块
from PIL import Image

# 2.使用open()打开图片,返回一个图片实例
# open()语法格式:
#         open(fp,mode)    fp指打开文件的路径  mode表示可选参数,表示打开文件的方式,通常使用默认值r
img = Image.open('pic1.jpg') # 图片可以自主替换
# 显示图片
# img.show()
# format 显示图像格式
print(img.format)  # 结果:JPEG

# size 显示图片的大小,格式为(宽度,高度)
print(img.size)  # 结果:(117, 124)

# width 显示图片的宽度 height显示图像的高度
print('图像宽度:',img.width,'图像高度',img.height)  # 结果:图像宽度: 117 图像高度 124

# getpixel((宽度,高度)) 显示像素信息
print(img.getpixel((50,50)))  # 结果:(22, 52, 18)


"""
可以使用new()创建新的图像,具体格式如下:
   new(mode,size,color)
       mode:图片模式,常用的"RGB":真彩图,"L":灰度图,"GMYK":图书出版
       size:图片尺寸,宽度和高度组成的元组
       color:颜色(默认黑色)
"""
img2 = Image.new('RGB',(100,100),'red')
# img2.show()


三、图像混合

"""
图像混合:
    1.使用blend()方法进行图像透明度混合
   格式:blend(image1,image2,alpha)
      image1,image2指的是需要混合的两张图片,两张图片的尺寸要一样,
      alpha表示混合透明度,取值范围为0-1,表示格式为(image1*(1-alpha)+image2*alpha),alpha为0,显示的就是image1的原图,alpha为1时,显示的是image2的原图
    2.使用composite()方法进行颜色遮罩
   格式:composite(image1,image2,mask)
       image1,image2指的是需要混合的两张图片,两张图片的尺寸要一样
       mask也是图像,尺寸要和image1,image2尺寸一样,mode为"1","L","RGBA"
"""
# 1.导入Image模块
from PIL import Image
# 2.分别打开和创建一张图片
img1 = Image.open('clock.png').convert(mode='RGB') # convert()作用为调整图片色彩模式
img2 = Image.new('RGB',img1.size,'yellow')
# 3.使用Image.blend()方法,进行图像混合
# Image.blend(img1,img2,alpha=0).show()  # 显示img1原图
Image.blend(img1,img2,alpha=0.5).show()  #img1与img2混合


# 4.使用Image.composite()进行颜色遮罩
img3 = Image.open('clock.png').convert(mode='RGB')
img4 = Image.open('pic3.jpg')
img4 =img4.resize(img3.size)  # resize()调整图片大小
mask = Image.new('RGBA',img3.size,'red')
Image.composite(img3,img4,mask).show()

四、图像复制、缩放、剪切、粘贴

"""
图像复制:
      格式:被复制图像名.copy()

图像的缩放(可以放大,可以缩小):
      1.按像素进行缩放
          格式:Image.eval(image,fun)
            iamge为要缩放的图像,fun为使用的函数
      2.按尺寸大小进行缩放
          格式:图像名.thumbnail(image,size)
          iamge为要缩放的图像,size为缩放的尺寸
图像的粘贴:
     格式: 图像名.paste(im,box=None,mask=None)
        im为图像名或者像素值,box指的是区域,mask指的是颜色遮罩,box有以下几种情况:
        1.(x1,y1):指的是以源图像左上角(x1,y1)点对齐,超出部分被舍弃
        2.(x1,y1,x2,y2):  源图像与此区域保持一致
        3.None:源图像与被粘贴区域保持一致
图像的剪切:
     格式:图像名.crop(box=None)
        box包含上下左右四个方位点

"""
# 图像复制
# 1.导入Image模块
from PIL import Image
# 2.打开图片
img1 = Image.open('clock.png')
img2 = img1.copy()
img2.show()

# 图像缩放
from PIL import Image
# 1.按像素进行缩放
#  img1 = Image.open('clock.png')
# img1.show()
# Image.eval(img1,lambda i:i*3).show() # lambda为匿名函数,在此作用为使像素放大为原来的3倍

# 2.按尺寸进行缩放
img2 = Image.open('clock.png')
print(img2.size)  # (194, 236)
img2.thumbnail((90,90))
print(img2.size)  # (74, 90)

# 图像的粘贴
from PIL import Image
img3 = Image.open('clock.png')
img4 = Image.open("pic1.jpg")
img4.paste(img3,(100,100))
img4.show()

# 图像的剪切
from PIL import Image
img5 = Image.open('clock.png')
img6 = img5.crop((100,100,50,50))
img5.paste(img6,(52,50))
img5.show()

五、图像旋转、格式转换、分离合并

"""
图像旋转:
    格式:图像名。rotate(angle):(还包含其它参数)
       angle为旋转角度
格式转换:
    1.图像名.covert(mode=None):(还包含其它参数)
      mode:转换文件模式,可选"L"、"RGB"、"CYMK"
    2.图像名.transpose(method):实现图像格式的转换
       method的取值有以下几个:
       Image.FLIP_TOP_BOTTOM:上下镜像
       Image.FLIP_LEFT_RIGHT左右镜像
 分离合并:
     1.图像名.split():将图片分割成多个通道列表
     2,Image.merge(mode,bands)
         mode:输出图像模式
         bands:波段通道
"""
# 图像的旋转
from PIL import Image
img1 = Image.open('clock.png')
img1.rotate(60).show()
img1.rotate(90).show()

# 格式转换
from PIL import Image
img2 = Image.open('clock.png')
img2.transpose(Image.FLIP_TOP_BOTTOM).show()  # 上下滤镜
img2.transpose(Image.FLIP_LEFT_RIGHT).show()  # 左右滤镜
img2.transpose(Image.ROTATE_90).show()  # 旋转90度
img2.transpose(Image.ROTATE_180).show()  # 旋转180度
img2.transpose(Image.ROTATE_270).show()  # 旋转180度
img2.transpose(Image.TRANSPOSE).show()   # 旋转180度

# 分离合并
from PIL import Image
# split() 和 merge()
img3 = Image.open('clock.png').convert('RGB')
img4 = Image.open('pic1.jpg').convert('RGB')
img3 = img3.resize(img4.size)
r1,g1,b1 = img3.split()  # 分成多个通道
r2,g2,b2 = img4.split()
temp =[r2,g1,b1]
img5 = Image.merge('RGB',temp)
img5.show()


六、图像滤镜

"""
图像滤镜:使用Image模块中的函数filter()可以对指定的图片使用滤镜效果,Pillow库可以使用的滤镜保存在ImageFilter模块中
     格式:
        图像名.filter(filter)
            参数filter表示滤镜内核
            常用滤镜:
            ImageFilter.GaussianBlur
            ImageFilter.EDGE_ENHANCE
            ImageFilter.EDGE_ENHANCE
"""
# 图像滤镜
# 1.导入Image,ImageFilter模块
from PIL import Image,ImageFilter
# 2.使用函数filter()实现滤镜效果
img = Image.open('clock.png')
img.filter(ImageFilter.GaussianBlur).show()  # 高斯模糊滤镜
img.filter(ImageFilter.EDGE_ENHANCE).show()  # 边缘增强滤镜
img.filter(ImageFilter.EDGE_ENHANCE).show()  # 寻找边缘滤镜

七、图片合成

"""
图片合成:pillow里ImageChops中包含多个用于实现图片合成的函数,合成的功能是通过计算通道中的像素值来实现现的,以下介绍常用函数中的一些常用用法
   1.加法函数add():对两张图片进行加法运算,
        格式:ImageChops(image1,image2)(还可包含其它参数)
   2.减法函数subtract():对两张图片进行减法运算
      格式:ImageChops(image1,image2)(还可包含其它参数)
   3.变暗函数darker():比较两个函数中较小的像素值,取两张图片中像素的较小值,去掉亮的部分,保留暗的部分
      格式:ImageChops.darker(image1,image2)
   4.变亮函数lighter():与变暗函数相反,取两张图片中像素的较大值,去掉暗的部分,保留亮的部分
      格式:ImageChops.lighter(image1,image2)
   5.叠加函数multiply(),将两张图片叠加
       格式:ImageChops.multiply(image1,image2)
   6.屏幕函数screen(),先反色后叠加,类似于将两张幻灯片投到一个屏幕上
       格式:ImageChops.screen(image1,image2)
   7.反色函数invert(),每个像素做减法,取出反色,在反色时用255减去一幅图像的每个像数值
       格式:ImageChops.invert(image)
   8.比较函数difference(),可以逐像素做减法操作,计算除绝对值,函数difference()能够两幅图像对应像素值相减后的图像
"""
# 图片相加
from PIL import Image,ImageChops
img1 = Image.open('clock.png')
img2 = Image.open('pic1.jpg')
ImageChops.add(img1+img2).show()

# 图片相减
img3 = Image.open('clock.png')
img4 = Image.open('pic1.jpg')
ImageChops.subtract(img3,img4).show()

# 图片变暗
img5 = Image.open('clock.png')
img6 = Image.open('pic1.jpg')
ImageChops.darker(img5,img6).show()

# 图片变亮
img7 = Image.open('clock.png')
img8 = Image.open('pic1.jpg')
ImageChops.lighter(img7,img8).show()

# 图片叠加
img9 = Image.open('clock.png')
img10 = Image.open('pic1.jpg')
ImageChops.multiply(img7,img8).show()

# 图片投影
img11 = Image.open('clock.png')
img12= Image.open('pic1.jpg')
ImageChops.screen(img7,img8).show()

# 图片反色
img13 = Image.open('clock.png')
ImageChops.invert(img13).show()

# 图片比较
img14 = Image.open('clock.png')
img15= Image.open('pic1.jpg')
ImageChops.difference(img14,img15).show()

八、调整图像色彩

"""
调整图像色彩:ImageEnhance模块中包含了多个增强图像效果的函数,用来调整图像的色彩,对比度,亮度,清晰度
           所有图片增强对象都实现一个通用接口,这个接口只包含一个方法:enhance(参数),参数为一个大于0的浮点数,小于1表示减弱,
           大于1表示增强,等于1表示返回原图片
      内置函数:
        1.ImageEnhance.Color(image):调整图像色彩平衡
        2.ImageEnhance.Contrast(image):调整图像对比度
        3.ImageEnhance.Brightness(image):调整图像亮度
        4.ImageEnhance.Sharpness(image):调整图像清晰度
"""
from PIL import Image,ImageEnhance
# ImageEnhance.Color(image):调整图像色彩平衡
img1 = Image.open('clock.png')
img2 =ImageEnhance.Color(img1).enhance(1.5)
img2.show()

# ImageEnhance.Contrast(image):调整图像对比度
img3 = Image.open('clock.png')
img4 =ImageEnhance.Contrast(img3).enhance(1.5)
img4.show()

# ImageEnhance.Brightness(image):调整图像亮度
img5= Image.open('clock.png')
img6 =ImageEnhance.Brightness(img5).enhance(1.5)
img6.show()

# ImageEnhance.Sharpness(image):调整图像清晰度
img7= Image.open('clock.png')
img8 =ImageEnhance.Sharpness(img7).enhance(1.5)
img8.show()

总结

本文讲解了python图像处理pillow中的相关知识,讲解了一些常用的函数及定义,主要提供学习用途,其中一些函数的参数没有写全,因为本篇博客讲解的是常用函数的常用用法,对一些复杂的参数操作并没有涉及。如有不足,敬请指正!

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值