数字图像基础(2)Pillow图像处理库

系列:数字图像基础(2)Pillow

一个不错的知乎帖子:学习如何使用Python的Pillow函数库来处理图像。

打开图像——Image.open()函数

Image.open(路径)返回image对象

打开、保存图像

# 导入模块
from PIL import Image
# 打开
img = Image.open('Liya.jpg')
# 保存
img.save('Liya_bk.jpg')
# 转换格式
img.save('Liya_bk.bmp')

图像对象的主要属性

图像格式.format
>>> img1 = Image.open("Liya.jpg")
>>> img2 = Image.open("Liya_bk.bmp")
>>> img1.format
'JPEG'
>>> img2.format  
'BMP'
尺寸.size
>>> img.size
(1080, 1440)
色彩模式.mode
>>> img.mode
'RGB'

显示图像

imshow()
img.imshow(image对象/Numpy数组)  # 效果:用默认应用打开图像
matplotlib显示多图像
from PIL import Image
import matplotlib.pyplot as plt

# 打开
img = Image.open('Liya.jpg')
img1 = Image.open("Liya.jpg")
img2 = Image.open("Liya_bk.bmp")

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

plt.subplot(131)
plt.axis("off")  # 不显示坐标值
plt.imshow(img)
plt.title(img.format)

plt.subplot(132)
plt.axis("off")
plt.imshow(img1)
plt.title(img1.format)

plt.subplot(133)
# plt.axis("off")
plt.imshow(img2)
plt.title(img2.format)

plt.show()

转换图像的色彩模式
取值色彩模式
1二值图像
L灰度图像
P8位彩色图
RGB24位彩色图
RGBA32位彩色图
CMYKCMYK彩色图
YCbCrYCbCr彩色图像
I32位整型灰度图像
F32位浮点灰度图像
# 打开
img = Image.open('Liya.jpg')
# 转换色彩模式
img1 = img.convert("L")
img2 = img.convert("1")
# 保存
img1.save('Liya_L.jpg')
img2.save('Liya_1.jpg')
颜色通道的分离与合并
img.split()
Image.merge(色彩模式, 图像列表)
from PIL import Image
import matplotlib.pyplot as plt

# 打开
img = Image.open('Liya.jpg')
# 通道分离
img_r, img_g, img_b = img.split()

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

plt.subplot(221)
plt.axis("off")  # 不显示坐标值
plt.imshow(img_r, cmap='gray')
plt.title('R', fontsize=20)

plt.subplot(222)
plt.axis("off")
plt.imshow(img_g, cmap='gray')
plt.title('G', fontsize=20)

plt.subplot(223)
plt.axis("off")
plt.imshow(img_b, cmap='gray')
plt.title('B', fontsize=20)

# 合并后的图像
img_rgb = Image.merge("RGB", [img_r, img_g, img_b])
plt.subplot(224)
plt.axis("off")
plt.imshow(img_rgb)
plt.title('B', fontsize=20)

plt.show()

转化为数组
from PIL import Image
import numpy as np

# 打开
img = Image.open('Liya.jpg')
# 转换为ndarray
arr_img = np.array(img)

arr_img.shape
(1440, 1080, 3)
type(arr_img)
<class 'numpy.ndarray'>
改变数组:明暗互换
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

# 打开
img = Image.open('Liya_L.jpg')
# 转换为ndarray
arr_img = np.array(img)
arr_img2 = 255 - arr_img  # 明暗互换

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

plt.subplot(121)
plt.axis("off")
plt.imshow(arr_img, cmap='gray')

plt.subplot(122)
plt.axis("off")
plt.imshow(arr_img2, cmap='gray')

plt.show()

缩放图像
from PIL import Image

img = Image.open('Liya_L.jpg')
# 方法一:resize(),新对象,不改变源对象
img2 = img.resize((100, 100))
# 方法二:thumbnail(),返回None,改变源对象
img.thumbnail((100, 100))
旋转、镜像
参数功能
Image.FLIP_LEFT_RIGHT水平翻转
Image.FLIP_TOP_BOTTOM上下翻转
Image.ROTATE_90逆时针旋转90°
Image.ROTATE_180逆时针旋转180°
Image.ROTATE_270逆时针旋转270°
Image.TRANSPOSE将图像进行转置
Image.TRANSVERSE将图像进行转置,再水平翻转
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

# 打开
img = Image.open('Liya.jpg')
img2 = img.transpose(Image.TRANSPOSE)  # 转置
img3 = img.transpose(Image.TRANSVERSE)  # 转置 + 上下翻转 + 左右翻转


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

plt.subplot(131)
plt.axis("off")
plt.imshow(img, cmap='gray')

plt.subplot(132)
plt.axis("off")
plt.imshow(img2, cmap='gray')

plt.subplot(133)
plt.axis("off")
plt.imshow(img3, cmap='gray')

plt.show()

裁剪图像
# 用法
# img.crop((x0, y0, x1, y1)) 左上角、右下角,返回图像对象

from PIL import Image

# 打开
img = Image.open('Liya_L.jpg')
# 剪裁
img2 = img.crop((0, 700, 700, 1400))
# 保存
img2.save('Liya_cut.bmp')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值