python图像处理 PIL Image操作实例


Posted in Python onApril 09, 2022

1. 图片加载、灰度图、 显示和保存

from PIL import Image

img = Image.open('01.jpg')
imgGrey = img.convert('L')

img.show()
imgGrey.show()

img.save('img_copy.jpg')
imgGrey.save('img_gray.jpg')

2. 图片宽、高、通道模式、平均值获取

from PIL import Image
import numpy as np

img = Image.open('01.jpg')

width, height = img.size
channel_mode = img.mode
mean_value = np.mean(img)

print(width)
print(height)
print(channel_mode)
print(mean_value)

3. 创建指定大小,指定通道类型的空图像

from PIL import Image

width = 200
height = 100

img_white = Image.new('RGB', (width,height), (255,255,255))
img_black = Image.new('RGB', (width,height), (0,0,0))
img_L = Image.new('L', (width, height), (255))

img_white.show()
img_black.show()
img_L.show()

4. 访问和操作图像像素

from PIL import Image

img = Image.open('01.jpg')

width, height = img.size

# 获取指定坐标位置像素值
pixel_value = img.getpixel((width/2, height/2))
print(pixel_value)

# 或者使用load方法
pim = img.load()
pixel_value1 = pim[width/2, height/2]
print(pixel_value1)

# 设置指定坐标位置像素的值
pim[width/2, height/2] = (0, 0, 0)

# 或使用putpixel方法
img.putpixel((w//2, h//2), (255,255,255))

# 设置指定区域像素的值
for w in range(int(width/2) - 40, int(width/2) + 40):
for h in range(int(height/2) - 20, int(height/2) + 20):
pim[w, h] = (255, 0, 0)
# img.putpixel((w, h), (255,255,255))
img.show()

5. 图像通道分离和合并

from PIL import Image

img = Image.open('01.jpg')

# 通道分离
R, G, B = img.split()

R.show)
G.show()
B.show()

# 通道合并
img_RGB = Image.merge('RGB', (R, G, B))
img_BGR = Image.merge('RGB', (B, G, R))
img_RGB.show()
img_BGR.show()

6. 在图像上输出文字

from PIL import Image, ImageDraw, ImageFont

img = Image.open('01.jpg')

# 创建Draw对象:
draw = ImageDraw.Draw(img)
# 字体颜色
fillColor = (255, 0, 0)

text = 'print text on PIL Image'
position = (200,100)

draw.text(position, text, fill=fillColor)
img.show()

7. 图像缩放

from PIL import Image

img = Image.open('01.jpg')

width, height = img.size

img_NEARESET = img.resize((width//2, height//2)) # 缩放默认模式是NEARESET(最近邻插值)
img_BILINEAR = img.resize((width//2, height//2), Image.BILINEAR) # BILINEAR 2x2区域的双线性插值
img_BICUBIC = img.resize((width//2, height//2), Image.BICUBIC) # BICUBIC 4x4区域的双三次插值
img_ANTIALIAS = img.resize((width//2, height//2), Image.ANTIALIAS) # ANTIALIAS 高质量下采样滤波

8. 图像遍历操作

from PIL import Image

img = Image.open('01.jpg').convert('L')

width, height = img.size

pim = img.load()

for w in range(width):
for h in range(height):
if pim[w, h] > 100:
img.putpixel((w, h), 255)
# pim[w, h] = 255
else:
img.putpixel((w, h), 0)
# pim[w, h] = 0

img.show()

9. 图像阈值分割、 二值化

from PIL import Image

img = Image.open('01.jpg').convert('L')

width, height = img.size

threshold = 125

for w in range(width):
for h in range(height):
if img.getpixel((w, h)) > threshold:
img.putpixel((w, h), 255)
else:
img.putpixel((w, h), 0)

img.save('binary.jpg')

10. 图像裁剪

from PIL import Image

img = Image.open('01.jpg')

width, height = img.size

# 前两个坐标点是左上角坐标
# 后两个坐标点是右下角坐标
# width在前, height在后
box = (100, 100, 550, 350)

region = img.crop(box)

region.save('crop.jpg')

11. 图像边界扩展

# 边界扩展
from PIL import Image

img = Image.open('test.png')

width, height = img.size
channel_mode = img.mode

img_makeBorder_full = Image.new(channel_mode, (2*width, height))
img_makeBorder_part = Image.new(channel_mode, (width+200, height))

# 图像水平扩展整个图像
img_makeBorder_full.paste(img, (0, 0, width, height))
img_makeBorder_full.paste(img, (width, 0, 2*width, height))

# 前两个坐标点是左上角坐标
# 后两个坐标点是右下角坐标
# width在前, height在后
box = (width-200, 0, width, height)
region = img.crop(box)

# 图像水平右侧扩展一个ROI
img_makeBorder_part.paste(img, (0, 0, width, height))
img_makeBorder_part.paste(region, (width, 0, width+200, height))
img_makeBorder_part.show()
img_makeBorder_full.show()

12. PIL.Image 和 numpy 格式相互转换

from PIL import Image
import numpy as np

img = Image.open('01.jpg')

array = np.array(img) # PIL.Image 转 numpy

img1 = Image.fromarray(array) # numpy转 PIL.Image
img1 = Image.fromarray(array.astype('uint8'))

img1.save('from_array.jpg')
Python 相关文章推荐
python文件操作之目录遍历实例分析
May 20 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
python安装Scrapy图文教程
Aug 14 Python
django2 快速安装指南分享
Jan 05 Python
python opencv之SIFT算法示例
Feb 24 Python
儿童python练习实例
May 27 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
提高python代码运行效率的一些建议
Sep 29 Python
分享3个非常实用的 Python 模块
Mar 03 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
用Python仅20行代码编写一个简单的端口扫描器
You might like
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
小学数学课后反思
2014/04/23 职场文书
廉洁教育学习材料
2014/05/19 职场文书
督导岗位职责
2015/02/04 职场文书
党员心得体会范文2016
2016/01/23 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python
python可视化之颜色映射详解
2021/09/15 Python