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
网友评论