PIL初探

作者: 非鱼2018 | 来源:发表于2019-10-12 23:06 被阅读0次

1.获取图像信息以及转换

from PIL import Image,ImageFilter

im=Image.open('demo.jpg')
 print(im.size)
# #(640, 1138)
 #获得给定位置的像素
 pix=im.load()
print(pix[0,0])
#也可以使用gitpixel方法
print(im.getpixel((0,0)))

#转换为黑白图像
im2=im.convert('L')
im2.show()
#制作缩略图
im.thumbnail((128,128), Image.ANTIALIAS)
im.show()

#裁减,坐标必须为int,分别代表左下右上的值
cut_img=img.crop((0,0,120,120))
#滤镜使用
im=Image.open('demo.jpg')
im2= im.filter(ImageFilter.BLUR)                ##均值滤波
im3= im.filter(ImageFilter.CONTOUR)             ##找轮廓
im4= im.filter(ImageFilter.FIND_EDGES)         ##边缘检测
im2.save('mohu.jpg')
im3.save('luokuo.jpg')
im4.save('bianyuan.jpg')

2.将图像拼接成多多个图像拼接

原图: demo.jpg
拼接后: big_demo.jpg
#先缩小或裁减
im=Image.open('demo.jpg')
small_img=im.resize((120,120))
# small_img.show()
print(small_img.size)
#裁减,坐标必须为int,分别代表左下右上的值
cut_img=small_img.crop((0,0,120,120))
cut_img.show()
print(cut_img.size)
im2=Image.new('RGB',(240,240))
print(im2.size)
#分别粘贴左,上,右,下
im2.paste(small_img,(0,0,120,120))
im2.paste(small_img,(120,0,240,120))
im2.paste(small_img,(0,120,120,240))
im2.paste(small_img,(120,120,240,240))
im2.show()
im2.save('big_demo.jpg')

优化下,可以自定义行数和列数拼接

#获得原始图片大小
im=Image.open('demo.jpg')
small_img=im.resize((120,120))
 w,h=small_img.size
 print(w,h)
 rows=6
 colunms=4
 im2=Image.new('RGB',(int(w*colunms),int(h*rows)))
 print(im2.size)
 for i in range(rows):
     for j in range(colunms):
         im2.paste(small_img,(int(j*w),int(i*h),int(j+1)*w,int(i+1)*h))
 im2.show()

3.从本地文件夹读取多张图片并拼接

 import os
 image_path="d:\\temp_dir\\"
 imgs_paths=[image_path+i for i in os.listdir(image_path)]
 #获得本地文件夹图像并缩小的副本
 img_resizes=[Image.open(i).resize((256,256)).copy() for i in imgs_paths]
 #使用new方法新建空图像
 big_img=Image.new('RGB',(768,768))
 index=0
 for i in range(3):
     for j in range(3):
        #big_img.paste(Image.open(paset_imgs[index]),(int(j*256),int(i*256),int(j+1)*256,int(i+1)*256))
         big_img.paste(img_resizes[index], (int(j * 256), int(i * 256), int(j + 1) * 256, int(i + 1) * 256))
        index=index+1
 big_img.show()
效果: big2.jpg

4.blend方法

使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。
合成公式为:out = image1 (1.0 - alpha) + image2 alpha
若变量alpha为0.0,返回第一张图像的拷贝。若变量alpha为1.0,将返回


 im1=Image.open('0.jpg')
 im2=Image.open('1.jpg')
 im = Image.blend(im1, im2, 0.40)
 im.show()

#split方法,分割出3个图像,分别为r ,g,b
 im = Image.open("demo.jpg")
 r,g,b = im.split()
 r.show()
 g.show()
 print(r.mode)

5.composite方法

复合类使用给定的两张图像及mask图像作为透明度,插值出一张新的图像。变量mask图像的模式可以为“1”,“L”或者“RGBA”。所有图像必须有相同的尺寸。

im1=Image.open('0.jpg')
im2=Image.open('1.jpg')
r,g,b = im1.split()
im = Image.composite(im1,im2,b)
im.show()
print(im.getbbox())

6.transfrom 转换图像

im.transform(size,method, data) ⇒ image

 from PIL import Image
 im = Image.open("demo.jpg")
 print(im.size)
 imtra = im.transform((500, 500), Image.EXTENT, (0,0,300,300))
# #转换图片大小为500*500,区域为整个图像,相当于resize,EXTENT代表矩形裁减
# #imtra = im.transform((500, 500), Image.EXTENT, im.getbbox())
 print(imtra.size)
 imtra.show()

7.镜像及旋转

 im=Image.open('demo.jpg')
 im2=im.rotate(45,expand=True)
 im2.show()
 im3=im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
 im3.show()

8.point增加图片亮度

 im=Image.open('demo.jpg')
 out = im.point(lambda i: i * 1.5 + 10)
 im.show()
 out.show()
 out.save('demo1.jpg')

参考资料:https://blog.csdn.net/leemboy/article/details/83792729
http://www.effbot.org/imagingbook/image.htm

相关文章

网友评论

      本文标题:PIL初探

      本文链接:https://www.haomeiwen.com/subject/qrgeyctx.html