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学习笔记之常用函数及说明
May 23 Python
python遍历类中所有成员的方法
Mar 18 Python
django用户注册、登录、注销和用户扩展的示例
Mar 19 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
Python实现CNN的多通道输入实例
Jan 17 Python
Pycharm debug调试时带参数过程解析
Feb 03 Python
Python argparse模块使用方法解析
Feb 20 Python
python实现字符串和数字拼接
Mar 02 Python
python numpy库np.percentile用法说明
Jun 08 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 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中文乱码
2009/11/26 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
python生成器表达式和列表解析
2016/03/10 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
淘宝网店营销策划书
2014/01/11 职场文书
学校岗位设置方案
2014/01/16 职场文书
酒店端午节活动方案
2014/08/26 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
2019最新劳动仲裁申请书!
2019/07/08 职场文书
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android