用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的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python中index()和seek()的用法(详解)
Apr 27 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Django项目中添加ldap登陆认证功能的实现
Apr 04 Python
Python实现插入排序和选择排序的方法
May 12 Python
python celery分布式任务队列的使用详解
Jul 08 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
python实现简单的聊天小程序
Jul 07 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
php截取字符串函数分享
2015/02/02 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
Javascript中replace()小结
2015/09/30 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
js随机生成一个验证码
2017/06/01 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
express 项目分层实践详解
2018/12/10 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
python Selenium 库的使用技巧
2020/10/16 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL