用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获取指定时间差的时间实例详解
Apr 11 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
通过实例了解python property属性
Nov 01 Python
python数值基础知识浅析
Nov 19 Python
python内置模块collections知识点总结
Dec 19 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 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
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js切换光标示例代码
2013/10/10 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
基于js实现投票的实例代码
2015/08/04 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
python脚本实现验证码识别
2018/06/07 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
python打开文件的方式有哪些
2020/06/29 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
接待员岗位责任制
2014/02/10 职场文书
机关搬迁方案
2014/05/18 职场文书
2015年电信员工工作总结
2015/05/26 职场文书