用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 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
python中urllib模块用法实例详解
Nov 19 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
ansible作为python模块库使用的方法实例
Jan 17 Python
Python编程实现生成特定范围内不重复多个随机数的2种方法
Apr 14 Python
Python给你的头像加上圣诞帽
Jan 04 Python
Python绘制的二项分布概率图示例
Aug 22 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
Python 忽略文件名编码的方法
Aug 01 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
德生PL990的分析评价
2021/03/02 无线电
PHP通用检测函数集合
2011/02/08 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
bootstrap实现动态进度条效果
2017/03/08 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
python 如何上传包到pypi
2020/12/24 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
医学生职业规划范文
2014/01/05 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
门店店长岗位职责
2015/04/14 职场文书
2015年计划生育责任书
2015/05/08 职场文书
革命电影观后感
2015/06/18 职场文书
高一英语教学反思
2016/03/03 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
深入详解JS函数的柯里化
2021/06/09 Javascript
css3 文字断裂效果
2022/04/22 HTML / CSS