前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10分钟学会pillow图像处理16式

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

作者头像
lyhue1991
发布2020-07-28 17:14:08
5970
发布2020-07-28 17:14:08
举报

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非常简单。

代码语言:javascript
复制
pip install pillow

一,图片读写

代码语言:javascript
复制
import numpy as np 
from PIL import Image,ImageFilter,ImageDraw,ImageFont
代码语言:javascript
复制
# 读取图片
img = Image.open("./data/猫咪图片.jpg")
print(img.format, img.size, img.mode)
print(img.info)
img 
代码语言:javascript
复制
JPEG (641, 641) RGB
{'jfif': 257, 'jfif_version': (1, 1), 'dpi': (72, 72), 'jfif_unit': 1, 'jfif_density': (72, 72)}
代码语言:javascript
复制
# 保存图片
img.save("./data/猫咪图片.png") 

二,图片与array互转

代码语言:javascript
复制
# Image转np.array
img = Image.open("./data/猫咪图片.jpg")
arr = np.array(img)
print(arr.shape)  
print(arr.dtype)
代码语言:javascript
复制
(641, 641, 3)
uint8
代码语言:javascript
复制
# np.array转Image

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

三,图片与string互转

代码语言:javascript
复制
# 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])
代码语言:javascript
复制
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
代码语言:javascript
复制
# string转Image 

b = base64.b64decode(s.encode("utf-8")) 
buffer = BytesIO(b) 
img = Image.open(buffer)
img 

四,图片由彩色转灰度

代码语言:javascript
复制
# 转成灰度
img = Image.open("./data/猫咪图片.jpg")
img.convert("L")

五,图片通道分离与合并

代码语言:javascript
复制
# 分离通道
img = Image.open("./data/猫咪图片.jpg")
r,g,b = img.split() 
b 
代码语言:javascript
复制
# 合并通道
Image.merge(mode = "RGBA", bands = [r,g,b,r])

六, 调整图片尺寸

代码语言:javascript
复制
# 调整大小
img = Image.open("./data/猫咪图片.jpg")
print(img.size)
img_resized = img.resize((300,300))
print(img_resized.size)
img_resized 
代码语言:javascript
复制
(641, 641)
(300, 300)

七, 截取图片部分区域

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")
img_croped = img.crop(box = [78,24,455,320]) 
print(img_croped.size)
img_croped
代码语言:javascript
复制
(377, 296)

八, 图片旋转

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")
img_rotated = img.rotate(15,center = (0,0)) #以center为中心逆时针旋转
img_rotated

九, 图片翻转

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")

# 左右翻转
img_left_right = img.transpose(Image.FLIP_LEFT_RIGHT)
img_left_right 

代码语言:javascript
复制
# 上下翻转
img_top_bottom = img.transpose(Image.FLIP_TOP_BOTTOM)
img_top_bottom

十, 提取图片边缘

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")

img_edges = img.filter(ImageFilter.FIND_EDGES)
img_edges 

十一, 图片高斯模糊

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")
img_blur = img.filter(ImageFilter.GaussianBlur(radius=3))
img_blur 

十二, 在图片上绘制文字

代码语言:javascript
复制
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

十三, 在图片上绘制直线

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")
draw = ImageDraw.Draw(img)

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

十四, 在图片上绘制矩形

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")
draw = ImageDraw.Draw(img)

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

十五, 在图片上绘制椭圆

代码语言:javascript
复制
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

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

代码语言:javascript
复制
img = Image.open("./data/猫咪图片.jpg")
img_resized = img.resize((150,150))
img.paste(img_resized,box = [460,50])
img
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法美食屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,图片读写
  • 二,图片与array互转
  • 三,图片与string互转
  • 四,图片由彩色转灰度
  • 五,图片通道分离与合并
  • 六, 调整图片尺寸
  • 七, 截取图片部分区域
  • 八, 图片旋转
  • 九, 图片翻转
  • 十, 提取图片边缘
  • 十一, 图片高斯模糊
  • 十二, 在图片上绘制文字
  • 十三, 在图片上绘制直线
  • 十四, 在图片上绘制矩形
  • 十五, 在图片上绘制椭圆
  • 十六, 在图片上粘贴其他图片
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档