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网络编程之TCP通信实例和socketserver框架使用例子
Apr 25 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python应用库大全总结
May 30 Python
python实现决策树分类
Aug 30 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
Django REST Framework序列化外键获取外键的值方法
Jul 26 Python
wxPython实现整点报时
Nov 18 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
Python requests获取网页常用方法解析
Feb 20 Python
详解Python中import机制
Sep 11 Python
pycharm 2020 1.1的安装流程
Sep 29 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
DIY实用性框形天线
2021/03/02 无线电
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
JS数学函数Exp使用说明
2012/08/09 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
Vue按需加载的具体实现
2017/12/02 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
通过python顺序修改文件名字的方法
2018/07/11 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
Python LMDB库的使用示例
2021/02/14 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
食品安全承诺书
2014/05/22 职场文书
父亲节活动策划方案
2014/08/24 职场文书
2014年个人总结范文
2015/03/09 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS
vue的项目如何打包上线
2022/04/13 Vue.js
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript