Python实现手绘图效果实例分享


Posted in Python onJuly 22, 2020

首先我们来看看原图:

Python实现手绘图效果实例分享

接着我们来看看效果图:

Python实现手绘图效果实例分享

通过分析我们不难发现以下特征:

  • 主要颜色为黑白灰

  • 边界线条较重

  • 相同或相近色趋于白色

  • 略有光源效果

需要用到的库有:

  • numpy

  • PIL

代码实现:

import numpy as np
from PIL import Image


baseImg = Image.open("./img/myimg2.jpg").convert("L")  # 这里放置你要手绘的图片原图
a = np.array(baseImg).astype("float")

depth = 8.
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.sin(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)                      # 限制

img = Image.fromarray(b.astype("uint8")) # 重构图像
img.save("./toImg/myImage1.jpg")         # 保存图像

实例扩展:

from PIL import Image
import numpy as np

#为了便于文件的导入,可以使用相对路径,将文件和程序放在同一个文件夹下

vec_el=np.pi/2.2
vec_az=np.pi/4.
depth=10.
im=Image.open("HIT2.jpg").convert('L')
a=np.asarray(im).astype('float')
grad=np.gradient(a)
grad_x,grad_y=grad
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
dx=np.cos(vec_el)*np.cos(vec_az)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A
a2=255*(dx*uni_x+dy*uni_y+dz*uni_z)
a2=a2.clip(0,255)
im2=Image.fromarray(a2.astype('uint8'))
im2.save('hit2-SH.jpg')

到此这篇关于Python实现手绘图效果实例分享的文章就介绍到这了,更多相关Python实现手绘图效果内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python处理中文编码和判断编码示例
Feb 26 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
Python编程中flask的简介与简单使用
Dec 28 Python
Python安装Flask环境及简单应用示例
May 03 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
Python小白不正确的使用类变量实例
May 29 Python
python 模块导入问题汇总
Feb 01 Python
Selenium及python实现滚动操作多种方法
Jul 21 #Python
如何在mac版pycharm选择python版本
Jul 21 #Python
python如何变换环境
Jul 21 #Python
零基础学Python之前需要学c语言吗
Jul 21 #Python
Python常驻任务实现接收外界参数代码解析
Jul 21 #Python
python中np是做什么的
Jul 21 #Python
从python读取sql的实例方法
Jul 21 #Python
You might like
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
汉字转化为拼音(php版)
2006/10/09 PHP
php中用文本文件做数据库的实现方法
2008/03/27 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
js正确获取元素样式详解
2009/08/07 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
微信小程序日期选择器实例代码
2018/07/18 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
Python Tkinter基础控件用法
2014/09/03 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
linux面试题参考答案(4)
2013/01/28 面试题
生物科学专业毕业生求职信
2014/06/02 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2014年班组工作总结
2014/11/20 职场文书
2015年全民创业工作总结
2015/07/23 职场文书