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不带重复的全排列代码
Aug 13 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
详解爬虫被封的问题
Apr 23 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
Python判断远程服务器上Excel文件是否被人打开的方法
Jul 13 Python
python3.7调试的实例方法
Jul 21 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
Python开发入门——迭代的基本使用
Sep 03 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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传输数据的代码
2007/11/13 PHP
php正则校验用户名介绍
2008/07/19 PHP
php不用正则验证真假身份证
2013/11/06 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
2016/07/07 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
影视制作岗位职责
2013/12/04 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
老干部工作汇报材料
2014/10/28 职场文书
大学生入党自荐书
2015/03/05 职场文书
高中班主任心得体会
2016/01/07 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
Golang表示枚举类型的详细讲解
2021/09/04 Golang
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS