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 19 Python
django解决跨域请求的问题
Nov 11 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
OpenCV 边缘检测
Jul 10 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
Python Lambda函数使用总结详解
Dec 11 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
Python Pygame实战之塔防游戏的实现
Mar 17 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Python实现科学占卜 让视频自动打码
Python自动化工具之实现Excel转Markdown表格
Python加密技术之RSA加密解密的实现
Apr 08 #Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
请求模块urllib之PYTHON爬虫的基本使用
用Python仅20行代码编写一个简单的端口扫描器
You might like
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
JavaScript简介
2015/02/15 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
javascript流程控制语句集合
2017/09/18 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python实现的建造者模式示例
2018/08/06 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
学生自我鉴定
2013/12/18 职场文书
2014村务公开实施方案
2014/02/25 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
成都人事代理协议书
2014/10/25 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书