用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抓取网页内容示例分享
Feb 24 Python
python使用分治法实现求解最大值的方法
May 12 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Django基础之Model操作步骤(介绍)
May 27 Python
Python面向对象编程基础解析(一)
Oct 26 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
python yield和Generator函数用法详解
Feb 10 Python
Python pip安装模块提示错误解决方案
May 22 Python
python代码区分大小写吗
Jun 17 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
python中id函数运行方式
Jul 03 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
虫族 ZERG 概述
2020/03/14 星际争霸
php 批量替换程序的具体实现代码
2013/10/04 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
简单介绍Python中的len()函数的使用
2015/04/07 Python
python实现二分查找算法
2017/09/21 Python
django中静态文件配置static的方法
2018/05/20 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
python实现ip代理池功能示例
2019/07/05 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Python页面加载的等待方式总结
2021/02/28 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
保荐人的岗位职责
2013/11/19 职场文书
关于运动会的稿件
2014/02/02 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python