用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入门篇之条件、循环
Oct 17 Python
Python模块包中__init__.py文件功能分析
Jun 14 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
Mac安装python3的方法步骤
Aug 09 Python
python实现两个文件夹的同步
Aug 29 Python
Python netmiko模块的使用
Feb 14 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 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验证码类实例分享
2013/12/27 PHP
php基本函数汇总
2015/07/09 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
解决pytorch-yolov3 train 报错的问题
2020/02/18 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
英语演讲稿3分钟
2014/04/29 职场文书
假面舞会策划方案
2014/05/29 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
淮海战役观后感
2015/06/11 职场文书