用Python PIL实现几个简单的图片特效


Posted in Python onJanuary 18, 2019

导入 numpy 、PIL

numpy用来做矩阵运算,PIL用来读取图片。

import numpy as np
from PIL import Image

读取图片,然后转换成RGB模式存在矩阵里

im = Image.open(imagename).convert('RGB')
arr = np.array(im)

查看arr的shape,可以看到arr是个3维的数组,数组大小等于 长*宽*3

In [566]: arr.shape
Out[566]: (313, 450, 3)

每个像素有3个数字表示,分别对应(R,G,B)

IN [567]: arr[0][0]
Out[567]: array([6, 4, 9], dtype=uint8)

原始图片

用Python PIL实现几个简单的图片特效

彩色转黑白

把像素的R,G,B三个通道数值都置为r*0.299+g*0.587+b*0.114

def blackWithe(imagename):
  # r,g,b = r*0.299+g*0.587+b*0.114
  im = np.asarray(Image.open(imagename).convert('RGB'))
  trans = np.array([[0.299,0.587,0.114],[0.299,0.587,0.114],[0.299,0.587,0.114]]).transpose()
  im = np.dot(im,trans)
  return Image.fromarray(np.array(im).astype('uint8'))

用Python PIL实现几个简单的图片特效

流年

把R通道的数值开平方,然后乘以一个参数

def fleeting(imagename,params=12):
  im = np.asarray(Image.open(imagename).convert('RGB'))
  im1 = np.sqrt(im*[1.0,0.0,0.0])*params
  im2 = im*[0.0,1.0,1.0]
  im = im1+im2
  return Image.fromarray(np.array(im).astype('uint8'))

用Python PIL实现几个简单的图片特效

旧电影

把像素的R,G,B三个通道数值,3个通道的分别乘以3个参数后求和,最后把超过255的值置为255

def oldFilm(imagename):
  im = np.asarray(Image.open(imagename).convert('RGB'))
  # r=r*0.393+g*0.769+b*0.189 g=r*0.349+g*0.686+b*0.168 b=r*0.272+g*0.534b*0.131
  trans = np.array([[0.393,0.769,0.189],[0.349,0.686,0.168],[0.272,0.534,0.131]]).transpose()
  # clip 超过255的颜色置为255
  im = np.dot(im,trans).clip(max=255)        
  return Image.fromarray(np.array(im).astype('uint8'))

用Python PIL实现几个简单的图片特效

反色

这个最简单了,用255减去每个通道的原来的数值

def reverse(imagename):
  im = 255 - np.asarray(Image.open(imagename).convert('RGB'))
  return Image.fromarray(np.array(im).astype('uint8'))

用Python PIL实现几个简单的图片特效

PS:示例

from PIL import Image, ImageFilter

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('Penguins.jpg')



# 模糊
im2 = im.filter(ImageFilter.BLUR)
# 模糊可设置模糊的程度
im22 = im.filter(ImageFilter.BoxBlur(200))
# 轮廓滤波
im3 = im.filter(ImageFilter.CONTOUR)
# 边缘增强滤波(锐化)
im4 = im.filter(ImageFilter.EDGE_ENHANCE)
# 浮雕滤波
im5 = im.filter(ImageFilter.EMBOSS)
# 寻找边缘信息的滤波
im6 = im.filter(ImageFilter.FIND_EDGES)

im2.save('BLUR.jpg', 'jpeg')
im3.save('CONTOUR.jpg', 'jpeg')
im4.save('EDGE_ENHANCE.jpg', 'jpeg')
im5.save('EMBOSS.jpg', 'jpeg')
im6.save('FIND_EDGES.jpg', 'jpeg')
im22.save('BoxBlur(200).jpg', 'jpeg')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python线程详解
Jun 24 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
解决python文件双击运行秒退的问题
Jun 24 Python
python yield关键词案例测试
Oct 15 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
Python语言中的数据类型-序列
Feb 24 Python
Python 多维List创建的问题小结
Jan 18 #Python
python感知机实现代码
Jan 18 #Python
python实现感知器算法(批处理)
Jan 18 #Python
python实现多层感知器
Jan 18 #Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 #Python
基于python实现KNN分类算法
Apr 23 #Python
python实现定时发送qq消息
Jan 18 #Python
You might like
linux下编译安装memcached服务
2014/08/03 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
PHP数组函数知识汇总
2016/05/12 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
用JQuery 实现的自定义对话框
2007/03/24 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
用CSS3来实现社交分享按钮
2014/11/11 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
教育技术职业规划范文
2014/03/04 职场文书
保证书格式范文
2014/04/28 职场文书
社区先进事迹材料
2014/05/19 职场文书
欢迎家长标语
2014/10/08 职场文书
十八大宣传标语
2014/10/09 职场文书
作文批改评语
2014/12/25 职场文书
检察院起诉意见书
2015/05/20 职场文书
法定代表人免职证明
2015/06/24 职场文书