python实现图片素描效果


Posted in Python onSeptember 26, 2020

代码如下:

from PIL import Image  #图像处理模块
import numpy as np

a = np.asarray(Image.open("这里是原图片的路径").convert('L')).astype('float')  
#将图像以灰度图的方式打开并将数据转为float存入np中

depth = 10.           # (0-100)
grad = np.gradient(a)       #取图像灰度的梯度值
grad_x, grad_y =grad        #分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
#建立一个位于图像斜上方的虚拟光源
vec_el = np.pi/2.2          # 光源的俯视角度,弧度值
vec_az = np.pi/4.          # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az)  #光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az)  #光源对y 轴的影响
dz = np.sin(vec_el)         #光源对z 轴的影响
#计算各点新的像素值
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)   #光源归一化
b = b.clip(0,255)  #clip函数将区间外的数字剪除到区间边缘

im = Image.fromarray(b.astype('uint8')) #重构图像
im.save("这里是输出图片的路径")

检验一下效果:

from PIL import Image  #图像处理模块
import numpy as np


# 将图像以灰度图的方式打开并将数据转为float存入np中
a = np.asarray(Image.open("D://Python//图片转素描//4.jpg").convert('L')).astype('float')

depth = 10.           # (0-100)
grad = np.gradient(a)       # 取图像灰度的梯度值
grad_x, grad_y =grad        # 分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A
# 建立一个位于图像斜上方的虚拟光源
vec_el = np.pi/2.2          # 光源的俯视角度,弧度值
vec_az = np.pi/4.          # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az)  # 光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az)  # 光源对y 轴的影响
dz = np.sin(vec_el)         # 光源对z 轴的影响
# 计算各点新的像素值
b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)   # 光源归一化
b = b.clip(0,255)  # clip函数将区间外的数字剪除到区间边缘

im = Image.fromarray(b.astype('uint8')) # 重构图像
im.save("D://Python//图片转素描//4_2.jpg")

原图:

python实现图片素描效果

转换后

python实现图片素描效果

但是不适合那些依赖光影变换效果的图片,比如我最爱的百里守约就很糟糕

python实现图片素描效果

python实现图片素描效果

以上就是python实现图片素描效果的详细内容,更多关于python 图片素描的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python文本数据相似度的度量
Mar 12 Python
基于numpy.random.randn()与rand()的区别详解
Apr 17 Python
python opencv实现运动检测
Jul 10 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python Django 命名空间模式的实现
Aug 09 Python
python sqlite的Row对象操作示例
Sep 11 Python
Python 解码Base64 得到码流格式文本实例
Jan 09 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 Python
Python:__eq__和__str__函数的使用示例
Sep 26 #Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 #Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 #Python
Python爬取股票信息,并可视化数据的示例
Sep 26 #Python
如何利用python发送邮件
Sep 26 #Python
Python 测试框架unittest和pytest的优劣
Sep 26 #Python
浅析python函数式编程
Sep 26 #Python
You might like
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
jQuery.each()用法分享
2012/07/31 Javascript
使用js获取地址栏中传递的值
2013/07/02 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
单链表反转python实现代码示例
2018/02/08 Python
对Python中range()函数和list的比较
2018/04/19 Python
Python3中exp()函数用法分析
2019/02/19 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Django用户认证系统 User对象解析
2019/08/02 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
python能否java成为主流语言吗
2020/06/22 Python
Python调用飞书发送消息的示例
2020/11/10 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
股东合作协议书
2014/09/12 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
Java字符串逆序方法详情
2022/03/21 Java/Android