版权声明:本文为博主原创文章,未经博主允许不得转载。 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)
原图:
本篇文章参考博客:博客地址