pillow常用图像处理功能总结

PIL:Python Imaging Library,是Python环境下最受欢迎的图像处理库之一。

pillow简单优雅而功能强大,是图像相关机器学习任务中算法工程师的亲密合作伙伴。

pillow如下16个常用的图像处理功能:

1. 图片读写

2. 图片与array互转

3. 图片与string互转

4. 图片由彩色转灰度

5. 图片通道分离与合并

6. 调整图片尺寸

7. 截取图片部分区域

8. 图片旋转

9. 图片翻转

10. 提取图片边缘

11. 图片高斯模糊

12. 在图片上绘制文字

13. 在图片上绘制直线

14. 在图片上绘制矩形

15. 在图片上绘制椭圆

16. 在图片上粘贴其他图片

安装pillow:pip install pillow

一、图片读写显示与保存

import numpy as np
from PIL import Image, ImageFilter, ImageDraw, ImageFont

# 读取图片
img = Image.open("猫咪图片.jpg")
print(img.format, img.size, img.mode)  # JPEG (641, 641) RGB
print(img.info)  # {'jfif': 257, 'jfif_version': (1, 1), 'jfif_unit': 0, 'jfif_density': (1, 1)}
img.show()

# 保存图片
img.save("./猫猫.png")

二、图片与array互转

# Image转np.array
img = Image.open("猫咪图片.jpg")
arr = np.array(img)
print(arr.shape)  # (641, 641, 3)
print(arr.dtype)  # uint8
# np.array转Image
arr = (np.ones((256,256))*np.arange(0,256)).astype(np.uint8)
img = Image.fromarray(arr)
img.show()


三、图片与string互转

# Image转string
import base64
from io import BytesIO
img = Image.open("猫咪图片.jpg")
buffer = BytesIO()
img.save(buffer, 'PNG')
b = buffer.getvalue()
s = base64.b64encode(b).decode("utf-8")
print(s[0:10])  # iVBORw0KGg
# string转Image
b = base64.b64decode(s.encode("utf-8"))
buffer = BytesIO(b)
img = Image.open(buffer)
img.show()

四、图片由彩色转灰度

# 转成灰度
img = Image.open("猫咪图片.jpg")
img = img.convert("L")
img.show()

五、图片通道分离与合并

# 分离通道
img = Image.open("猫咪图片.jpg")
r, g, b = img.split()  # OpenCV加载时是BGR模式  Matplotib是RGB模式  Image是RGB模式
r.show()

# 合并通道
Image.merge(mode = "RGBA", bands = [r,g,b,r])

六, 调整图片尺寸

# 调整大小
img = Image.open("猫咪图片.jpg")
print(img.size)  # (641, 641)
img_resized = img.resize((300, 300))
print(img_resized.size)  # (300, 300)
img_resized.show()

七、截取图片部分区域

img = Image.open("猫咪图片.jpg")
img_croped = img.crop(box=[78, 24, 455, 320])
print(img_croped.size)  # (377, 296)
img_croped.show()

八、图片旋转

img = Image.open("猫咪图片.jpg")
img_rotated = img.rotate(15, center=(0, 0))  # 以center为中心逆时针旋转
img_rotated.show()

九、图片翻转

img = Image.open("猫咪图片.jpg")
# 左右翻转
img_left_right = img.transpose(Image.FLIP_LEFT_RIGHT)
img_left_right.show()

img = Image.open("猫咪图片.jpg")
# 上下翻转
img_top_bottom = img.transpose(Image.FLIP_TOP_BOTTOM)
img_top_bottom.show()

十、提取图片边缘

img = Image.open("猫咪图片.jpg")
# 上下翻转
# ImageFilter.FIND_EDGES为寻找边缘信息的滤波,会找出图像中的边缘信息
img_top_bottom = img.transpose(Image.FLIP_TOP_BOTTOM)
img_top_bottom.show()

十一、图片高斯模糊

img = Image.open("猫咪图片.jpg")
img_blur = img.filter(ImageFilter.GaussianBlur(radius=3))
img_blur.show()

十二、在图片上绘制文字

img = Image.open("猫咪图片.jpg")
draw = ImageDraw.Draw(img)
arial = ImageFont.truetype('simsun.ttc', 46)  # truetype:表示字体
draw.text((250, 450), "敢梭哈吗?", font=arial, fill="white")
img.show()

十三、 在图片上绘制直线

img = Image.open("猫咪图片.jpg")
draw = ImageDraw.Draw(img)
draw.line([0, 0, 641, 641], fill="red", width=5)
img.show()

十四、在图片上绘制矩形

img = Image.open("猫咪图片.jpg")
draw = ImageDraw.Draw(img)
draw.rectangle([78, 24, 455, 320], fill=None, outline='lawngreen', width=5)
img.show()

十五、在图片上绘制椭圆

img = Image.open("猫咪图片.jpg")
draw = ImageDraw.Draw(img)
draw.arc(xy=[78, 24, 455, 320], start=0, end=360, fill="red", width=5)
img.show()

十六、在图片上粘贴其他图片

img_resized = img.resize((150, 150))
img.paste(img_resized, box=[460, 50])
img.show()

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值