十分钟学会python-10分钟学会pillow图像处理16式

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("./data/猫咪图片.jpg")

print(img.format, img.size, img.mode)

print(img.info)

img

JPEG (641, 641) RGB

{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (72, 72), 'jfif_unit': 1, 'jfif_density': (72, 72)}

ad3f95534d6cc4af789be3d6a502ae50f55.jpg

# 保存图片

img.save("./data/猫咪图片.png")

二,图片与array互转

# Image转np.array

img = Image.open("./data/猫咪图片.jpg")

arr = np.array(img)

print(arr.shape)

print(arr.dtype)

(641, 641, 3)

uint8

# np.array转Image

arr = (np.ones((256,256))*np.arange(0,256)).astype(np.uint8)

img = Image.fromarray(arr)

img

a96e572b8e17ece8ff98e8f24ad7b9466b3.png

三,图片与string互转

# Image转string

import base64

from io import BytesIO

img = Image.open("./data/猫咪图片.jpg")

buffer = BytesIO()

img.save(buffer, 'PNG')

b = buffer.getvalue()

s = base64.b64encode(b).decode("utf-8")

print(s[0:1000])

iVBORw0KGgoAAAANSUhEUgAAAoEAAAKBCAIAAACnMebvAAEAAElEQVR4nOz96bMtSXIfiLl7ROR2lru+raqrqxsEQBAkRuKMRHI0kj6OSTLJ9M+KRumTTJwxyWZGJm6DIQguAHqp7lree3c5S2ZGhLs+eIbfOOe+V13dKGxjCHt27b5z82RGRnj4z3fHT69fJB3CiEhEDCIi5H1KKQt775umEYRpmsZx/PGnn3Vd94tf/OLu7u7y8lJExnG8uro6Ho/ee+ccMwNA13UXFxebzeZnP/uZcw4R53k+Ho/TNIkIIiIiMxMREaWUcs6bzebm5mae5/1+H2NsmiaEkHOe55mZvfcAkFKa5xkA9OL1er3ebv/oj/7IOSciOUbv/cPDAwr0fb/uh5ubmxDCeDgi4vF4/NnPfjYHBAAsQ38HgJxzSklEiAgARKRt22EYmqaZpul4PM7zbDMXEfgbMnSqurP2EwDGcaz/axf/DXq1aZq6rgMAEfmd3/mdm5ubn/3sZz//+c9TSgCgJCEiIYS+7+d5nqYp5+y9R8Scs4g45z5287NdtrUaOdknKICIZNfI8tOWlABczuv1uuu6lNI0TXo6mFkncHZ/AEhxdM7ps5TenHPOuZTSarXquo6Z7eAw80wZAHJMMUZP5L3PMY2Ho3Nuu1oPfS8iHJOIcMoxRiYnIjlnvQ8UCsk5O+dCCCEEXRb9PMWdnt+cc4wx50xEeuXxeBSRYRj6vnfO6XmJhwcqQ99UxzAMIqK/1y8ukpUVzPOsR7tt26ZphmGwZdEn6jQaDHoHRBTCnPM4juM89X2/Px6dcxcXF74JMcYQwna7TeCULyknSSkhovfezoWus1F+hFnXvGmapml0bjlnKIxCr0TEEIL3fjelpml0xexk7ff74/GoX1TmZqv9W3/3d66vr5l5HMfNsOr7npkJMMYoOSsnzjEpt5znOca42+2Ucg6HwzzPV1dXn3766YsXL0IIXdc1TQMA8zyP4xhj

# string转Image

b = base64.b64decode(s.encode("utf-8"))

buffer = BytesIO(b)

img = Image.open(buffer)

img

ad3f95534d6cc4af789be3d6a502ae50f55.jpg

四,图片由彩色转灰度

# 转成灰度

img = Image.open("./data/猫咪图片.jpg")

img.convert("L")

17f51c914a3c8b15ab6c169774339caded9.png

五,图片通道分离与合并

# 分离通道

img = Image.open("./data/猫咪图片.jpg")

r,g,b = img.split()

b

420103f8fc66e6fad69e577fd7aeee6ab15.png

# 合并通道

Image.merge(mode = "RGBA", bands = [r,g,b,r])

a6814fc164384285e966031455b723a6f1a.png

六, 调整图片尺寸

# 调整大小

img = Image.open("./data/猫咪图片.jpg")

print(img.size)

img_resized = img.resize((300,300))

print(img_resized.size)

img_resized

(641, 641)

(300, 300)

036e15305320106b6fd844a658d11e59d2d.png

七, 截取图片部分区域

img = Image.open("./data/猫咪图片.jpg")

img_croped = img.crop(box = [78,24,455,320])

print(img_croped.size)

img_croped

(377, 296)

426a44b9185f233087454a6a1857d83c9ba.png

八, 图片旋转

img = Image.open("./data/猫咪图片.jpg")

img_rotated = img.rotate(15,center = (0,0)) #以center为中心逆时针旋转

img_rotated

31db1a9692936e549a344e89a83bc8f4c5b.png

九, 图片翻转

img = Image.open("./data/猫咪图片.jpg")

# 左右翻转

img_left_right = img.transpose(Image.FLIP_LEFT_RIGHT)

img_left_right

54115baf7e4d8e522cf09c10e4f9e43d63f.png

# 上下翻转

img_top_bottom = img.transpose(Image.FLIP_TOP_BOTTOM)

img_top_bottom

00ab1ec827c2b5a624c43de9cb746f92487.png

十, 提取图片边缘

img = Image.open("./data/猫咪图片.jpg")

img_edges = img.filter(ImageFilter.FIND_EDGES)

img_edges

dfc113a37c250b6492a54fe0527848230d6.png

十一, 图片高斯模糊

img = Image.open("./data/猫咪图片.jpg")

img_blur = img.filter(ImageFilter.GaussianBlur(radius=3))

img_blur

b67fb323fc7db219d5d21d16a5851338f20.png

十二, 在图片上绘制文字

img = Image.open("./data/猫咪图片.jpg")

draw = ImageDraw.Draw(img)

arial = ImageFont.truetype('./data/simsun.ttc', 46)

draw.text((250,450),"敢梭哈吗?",font =arial, fill="white")

img

3c169b4f82e1fa567ca9ba5edd2e6a0ad99.png

十三, 在图片上绘制直线

img = Image.open("./data/猫咪图片.jpg")

draw = ImageDraw.Draw(img)

draw.line([0,0,641,641],fill = "red",width = 5)

img

7169f65c9de5d639cf15a2434ef4589b7d3.png

十四, 在图片上绘制矩形

img = Image.open("./data/猫咪图片.jpg")

draw = ImageDraw.Draw(img)

draw.rectangle([78,24,455,320], fill=None, outline ='lawngreen',width = 5)

img

6a0f85770d53d5ce9d0ec6c5df0aa77007a.png

十五, 在图片上绘制椭圆

img = Image.open("./data/猫咪图片.jpg")

draw = ImageDraw.Draw(img)

draw.arc(xy = [78,24,455,320],start = 0,end = 360,fill="red",width=5)

img

a826ec7c41493f961ec194b6e76612e5af9.png

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

img = Image.open("./data/猫咪图片.jpg")

img_resized = img.resize((150,150))

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

img

a2745664dd251f19dd4b3141a3c1ec5fa3f.png

如果对本文内容理解上有需要进一步和作者交流的地方,欢迎在公众号"Python与算法之美"下留言。作者时间和精力有限,会酌情予以回复。

也可以在公众号后台回复关键字:加群,加入读者交流群和大家讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值