python 图像处理模块pillow

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_43061687/article/details/82050945

PIL:python imageing library,是python的基本图像处理库,PIL功能强大,API简单易用。由于PIL只支持python2.7,因此一群志愿者在PIL的基础上创建了新的版本pillow,加入了很多新的特性,并且支持python3.


Pillow官方教程[链接]:(https://pillow.readthedocs.io/en/latest/handbook/tutorial.html#image-enhancement)
教程目录
从官方教程可以看到pillow对图像的处理包括:读写,剪切,粘贴,通道的分离,几何旋转,灰度图彩色图切换,图像增强,视频序列操作,图像打印,以及对图像流的操作。
接下来分别对pillow的各个processing操作:

from PIL import Image

###图片的读写
#读取图片
im = Image.open('test.jpg')
##另一种读写图片方式
fp = open("tu.jpg", "rb")  
im = Image.open(fp)  

#保存图片为另y一幅图片
im.save('rgb.jpg')
#显示图片
im.show()

##拷贝、粘贴、旋转、合并图片

#设置要拷贝的区域  
box = (100, 100, 500, 500)

# 将im表示的图片对象拷贝到region中,大小为(400*400)像素。
# box变量是一个四元组(左,上,右,下)。  
region  = im.crop(box)
#旋转  
region = region.transpose(Image.ROTATE_90)
#粘贴box大小的region到原先的图片对象中。  
im.paste(region, box)
im.save('1.jpg')

##通道分离合并
r,g,b = im.split()#分割成三个通道  
im = Image.merge("RGB", (b, g, r))  #将b,r两个通道进行翻转然后合并。 
im.save('rgb.jpg')

###几何转变
### image有resize()、rotate()和transpose()、transform()方法进行几何变换,用以重定####义图片大小,对图片进行旋转等操作。 
###简单几何变换:
out = im.resize( ( 128,128))
out = im.rotate(45)

#h彩色图灰度图的转化
am = im.convert('L')#将彩色图im转变为灰度图am
am.show()

#图像增强

from PIL import ImageFilter  

im = Image.open('tu.jpg')
out = im.filter(ImageFilter.DETAIL) #滤波操作
###像素点的操作
out = im.point(lambda i : i *  1.2)

图像添加文字:

from PIL import Image,ImageDraw,ImageFont

im = Image.open('tu.jpg')
draw = ImageDraw.Draw(im)

(width, height) = im.size
myfont  = ImageFont.truetype('yuanqi.ttf',size = 120)
fillcolor = 'pink'

#第一个参数是加入字体的坐标
#第二个参数是文字内容
#第三个参数是字体格式
#第四个参数是字体颜色
draw.text( (60,100) , u'萌萌哒' ,font = myfont , fill = fillcolor )
im.save('tu_word.jpg')

添加文字结果
图像添加数字:

from PIL import Image,ImageDraw,ImageFont

im = Image.open('tu.jpg')
draw = ImageDraw.Draw(im)

(width, height) = im.size
myfont  = ImageFont.truetype('yuanqi.ttf',size = 120)

#在图上画一个圆,ellipse参数分别为 左上角的坐标,右下角的坐标
#ellipse(左上X , 左上Y , 右下X , 右下Y)
draw.ellipse((width-200, 0 ,width,200),fill="red",outline="red")   

draw.text((width-120,20 ),'5',font=myfont,fill='white')
im.save('tu_number.jpg')

添加数字结果
图像转化成字符画:

from PIL import Image

#要索引的字符列表
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
length = len(ascii_char)

 #读取图像文件
def readImg():
    img = Image.open('kai.png')
    (width,height) = img.size
    img = img.resize( ( int(width * 0.9) ,  int(height * 0.5) ))
    print(img.size)
    return img

def convert(img):
    # 转为灰度图像
    img = img.convert('L')
    txt = ''
    for y in range(img.size[1]):
        for x in range(img.size[0]):
            # 获取每个坐标像素点的灰度
            gray = img.getpixel((x,y))
            unit = 256.0 / length
            txt += ascii_char[(int)(gray/unit)]
        txt += '\n'
    return txt

if __name__ == '__main__':
    txt = convert(readImg())
    with open('kai.txt','w') as f:
        f.write(txt)

原图:
原图

本篇文章参考博客:博客地址

猜你喜欢

转载自blog.csdn.net/weixin_43061687/article/details/82050945