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基础教程之udp端口扫描
Feb 10 Python
python类参数self使用示例
Feb 17 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
python批量替换多文件字符串问题详解
Apr 22 Python
浅析PHP与Python进行数据交互
May 15 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
教你怎么用python爬取爱奇艺热门电影
May 20 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抓取页面的几种方法详解
2013/06/17 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
强制设为首页代码
2006/06/19 Javascript
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
JavaScript 实现继承的几种方式
2021/02/19 Javascript
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
移风易俗倡议书
2014/04/15 职场文书
终止合同协议书
2014/04/17 职场文书
2014年会策划方案
2014/05/11 职场文书
公司承诺书范文
2014/05/19 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
人民调解协议书范本
2014/10/11 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
mysql数据库实现设置字段长度
2022/06/10 MySQL
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers