Loading

pillow的简单使用

导入

from PIL import Image

加载图片和保存图片

在保存图片的时候会根据输入文件名的后缀名自动转换文件格式

image = Image.open(r'./lena.tiff')
image.save(r'./lena.jpg')
image.save(r'./lena.bmp')

图像的对象的主要属性

参数 含义
image.format 图片的格式,如jpg等
image.size 图片的尺寸,如1920*1080
image.mode 图片的色彩模式,如rgb模式
print(image.format)
print(image.size)
print(image.mode)

TIFF
(512, 512)
RGB

显示图像

plt.imshow,传入参数为numpy数组或者Image对象

plt.figure(figsize=(5,5))
plt.imshow(image)
plt.show()

显示多个图像

image = Image.open(r'./lena.tiff')
img1 = Image.open(r'./lena.jpg')
img2 = Image.open(r'./lena.bmp')

plt.figure(figsize=(15,5))
plt.subplot(1,3,1)
plt.axis('off')
plt.imshow(image)
plt.title(image.format)

plt.subplot(1,3,2)
plt.axis('off')
plt.imshow(img1)
plt.title(img1.format)

plt.subplot(1,3,3)
plt.axis('off')
plt.imshow(img2)
plt.title(img2.format)

plt.show()

在这里插入图片描述

图像处理

转换彩色模式

就是图像处理中的转换成灰度图像 或者转换为二值图像等

取值 色彩模式
1 二值图像
L 灰度图像
P 8位彩色图像
RGB 24位彩色图像
RGBA 32位彩色图像
CMYK CMYK彩色图像
YCbCr YCbCr彩色图像
I 32位整型灰度图像
F 32位浮点灰度图像
image = Image.open(r'./lena.tiff')
img_gray = image.convert('L')
plt.figure(figsize=(5,5))
plt.imshow(img_gray,cmap='gray')
plt.show()

颜色通道的分离与合并

分离:图像对象.split()
合并:Image.merge(色彩模式, 图像列表)

image = Image.open(r'./lena.tiff')
img_r,img_g,img_b = image.split()
img_rgb = Image.merge("RGB",[img_r,img_g,img_b])

plt.figure(figsize=(10,10))

plt.subplot(2,2,1)
plt.axis('off')
plt.imshow(img_r,cmap="Reds")
plt.title("red")

plt.subplot(2,2,2)
plt.axis('off')
plt.imshow(img_g,cmap="Greens")
plt.title("green")

plt.subplot(2,2,3)
plt.axis('off')
plt.imshow(img_b,cmap="Blues")
plt.title("blue")

plt.subplot(2,2,4)
plt.axis('off')
plt.imshow(img_rgb)
plt.title("rgb")

plt.show()

转换为数组

image = Image.open(r'./lena.tiff')
image_gray = image.convert('L')
arr_image = np.array(image)
arr_image_gray = np.array(image_gray)
print(arr_image)
print(arr_image_gray)


图像反色

image = Image.open(r'./lena.tiff')
image_gray = image.convert('L')
arr_image = np.array(image)
arr_image_gray = np.array(image_gray)
arr_image_gray_new = 255-arr_image_gray

plt.figure(figsize=(8,5))

plt.subplot(1,2,1)
plt.axis('off')
plt.imshow(image_gray,cmap='gray')

plt.subplot(1,2,2)
plt.axis('off')
plt.imshow(arr_image_gray_new,cmap='gray')

plt.show()

修改图像尺寸

图像对象.resize((width, height))
图像对象.thumbnail((width, height)) 原地操作,返回值是None
resize()方法不对原图进行修改,
thumbnail()方法是原地操作,直接对image对象本身进行缩放

image = Image.open(r'./lena.tiff')
image_small = image.resize((64,64))
plt.figure(figsize=(5,5))
plt.imshow(image_small)
plt.show()

在这里插入图片描述

旋转、镜像

图像对象.transpose(旋转方式)
Image.FLIP_LEFT_RIGHT:水平翻转
Image.FLIP_TOP_BOTTOM:上下翻转
Image.ROTATE_90:逆时针旋转90°
Image.ROTATE_180:逆时针旋转180°
Image.ROTATE_270:逆时针旋转270°
Image.TRANSPOSE:将图像进行转置
Image.TRANSVERSE:将图像进行转置,再水平翻转

plt.figure(figsize=(8,8))
image = Image.open(r'./lena.tiff')
image_frl = image.transpose(Image.FLIP_LEFT_RIGHT)
image_r90 = image.transpose(Image.ROTATE_90)
image_T = image.transpose(Image.TRANSPOSE)

plt.subplot(2,2,1)
plt.imshow(image)
plt.axis('off')
plt.title('原图')

plt.subplot(2,2,2)
plt.imshow(image_frl)
plt.axis('off')
plt.title('自由翻转')

plt.subplot(2,2,3)
plt.imshow(image_r90)
plt.axis('off')
plt.title('逆时针旋转90度')

plt.subplot(2,2,4)
plt.imshow(image_T)
plt.axis('off')
plt.title('转置')

plt.show()

在这里插入图片描述

图片的裁剪

image = Image.open(r'./lena.tiff')
image_crop = image.crop((100,100,400,400))

plt.figure(figsize=(8,4))
plt.subplot(1,2,1)
plt.imshow(image)
plt.subplot(1,2,2)
plt.imshow(image_crop)
plt.show()

滤波

image = Image.open(r'./lena.tiff')
image_blur = image.filter(ImageFilter.BLUR)
image_gaussian =image.filter(ImageFilter.GaussianBlur)
plt.figure(figsize=(9,3))
plt.subplot(1,3,1)
plt.imshow(image)
plt.subplot(1,3,2)
plt.imshow(image_blur)
plt.subplot(1,3,3)
plt.imshow(image_gaussian)
plt.show()

在这里插入图片描述

posted @ 2021-03-26 16:45  克豪  阅读(233)  评论(0)    收藏  举报