【Pillow库图像处理二】

目录

一、ImageChops模块

二、ImageEnhance模块

三、ImageDraw模块

四、ImageFont的使用

五、相关实例

一、ImageChops模块

1.ImageChops模块包含多个实现图片合成函数,通过计算通道种像素值来实现

2.相关函数的调试:

from PIL import Image,ImageChops
#打开图片
img1=Image.open('cat.jpg')
img2=Image.open('girl.jpg')

#对两张图片进行算数加法运算
#ImageChops.add(img1,img2).show()

#减法运算
#ImageChops.subtract(img1,img2).show()

#变暗函数darker()
#ImageChops.darker(img1,img2).show()

#变亮函数lighter()
#ImageChops.lighter(img1,img2).show()

#相互叠加函数multiply()
#ImageChops.multiply(img1,img2).show()

#screen()函数两图投影效果
#ImageChops.screen(img1,img2).show()

#反色invert()
#ImageChops.invert(img2).show()

#比较函数difference()
ImageChops.difference(img1,img2).show()

e79d6ea693394da8a7c577deb413e724.png1d7f49fa8a4b461683ff74b488942e59.png

 二、ImageEnhance模块

1.ImageEnhance模块包含多个用于增强图像效果的函数,主要用于调整图像的色彩、对比度、亮度和清晰度,使用模块时,首先创建对应的增强调整器,再调用调整器输出函数

2.调整图像色彩:

from PIL import Image,ImageEnhance
img=Image.open('girl.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#将原图复制到(0,0)
img_output.paste(img,(0,0))
#获取色彩调整器
img_color=ImageEnhance.Color(img)
imgb=img_color.enhance(1.5)
img_output.paste(imgb,(w,0))
#减弱色彩
imgc=img_color.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()

cc1b8fe089f34e4f8ed58015e1dda4b1.png

 3.调整图像亮度:

from PIL import Image,ImageEnhance
img=Image.open('girl.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
#将原图复制到(0,0)
img_output.paste(img,(0,0))
#获取亮度调整器
img_brighter=ImageEnhance.Brightness(img)
imgb=img_brighter.enhance(1.5)
img_output.paste(imgb,(w,0))
#降低亮度
imgc=img_brighter.enhance(0.5)
img_output.paste(imgc,(2*w,0))
img_output.show()

c7b8254f406d4e4191ad123f4d0d896d.png

 4、像素点运算实现图像整体变亮(暗)

from PIL import Image
img=Image.open('girl.jpg')
w,h=img.size
img_output=Image.new('RGB',(3*w,h))
img_output.paste(img,(0,0))
#使用point()函数对像素点进行运算
#整体提亮
imgb=img.point(lambda i:i*1.5)
#整体变暗
imgc=img.point(lambda i:i*0.7)
img_output.paste(imgb,(w,0))
img_output.paste(imgc,(2*w,0))
img_output.show()

三、ImageDraw模块

1.ImageDraw模块实现了绘图功能,可以通过创建图片方式绘制2D图像,也可以在原有图片上进行绘图,首先需要创建一个ImageDraw.Draw对象,再引用创建的Draw对象进行绘图

2.创建一个图片进行绘制:

from PIL import Image,ImageDraw,ImageFont
#创建一幅白色背景图像
img=Image.new('RGB',(300,200),'white')
#绘制矩形
draw_obj=ImageDraw.Draw(img)
draw_obj.rectangle((50,50,150,150),outline='blue',fill='pink')
font=ImageFont.truetype('SIMLI.TTF',20)
draw_obj.text((70,80),'Hello!',fill='black',font=font)
img.show()

fabe42b370a24238864e04cbfe3ee7b2.png

 3.在原有图片上进行绘制:

from PIL import Image,ImageDraw
img=Image.open('girl.jpg')
w,h=img.size
#创建绘图对象
draw_obj=ImageDraw.Draw(img)
draw_obj.arc((0,0,w-1,h-1),0,360,fill='blue')
img.save('circle.jpg')

62a2fb5686f84888a817e1196b6f4d03.png 

四、ImageFont的使用

ImageFont模块是实现对字体和字型的处理 

from PIL import Image,ImageDraw,ImageFont
img=Image.open('girl.jpg')
draw_obj=ImageDraw.Draw(img)
#font=ImageFont.load_default()#加载一个默认字体
font=ImageFont.truetype('SIMYOU.TTF',40)#加载中文
draw_obj.text((40,50),"你好,世界!",font=font,fill='black')
img.show()

五、相关实例

1.绘制十字:

from PIL import Image,ImageDraw
img=Image.open('f.jpg')
draw_obj=ImageDraw.Draw(img)
w,h=img.size
draw_obj.line((0,0,w,h),fill='blue',width=5)
draw_obj.line((0,h,w,0),fill='blue',width=5)
img.show()

848a92aa28284c0daa25121cf8eb73c1.png

 2.绘制九宫格:

from PIL import Image,ImageDraw
w,h=300,300
img=Image.new('RGB',(w,h),'white')
draw_obj=ImageDraw.Draw(img)

def get_color(x,y):
    a=x//100+y//100
    if a==0:
        return (255,0,0)
    elif a==1:
        return (255,255,0)
    elif a==2:
        return (255,255,255)
    elif a==3:
        return (255,0,255)
    elif a==4:
        return(0,0,255)
    else:
        return (0,0,0)
for x in range(w):
    for y in range(h):
        draw_obj.point((x,y),fill=get_color(x,y))
img.show()

b9bd91864e7d4e779ae6bdbca91b0abb.png

 3、将图片中黄色变成红色:

from PIL import Image,ImageDraw
img=Image.open('f.jpg')
draw_obj=ImageDraw.Draw(img)
w,h=img.size
def get_color(oldColor):
    #将黄色变成红色
    #获取每个通道的值

    if oldColor[0]>60 and oldColor[1]>60:
        return (oldColor[0],0,oldColor[2])
    else:
        return oldColor
for x in range(w):
    for y in range(h):
        oldColor=img.getpixel((x,y))
        draw_obj.point((x,y),fill=get_color(oldColor))
img.show()

 ac123ed579d848a4803f9412f208ef66.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

In my opinion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值