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实现Tab自动补全和历史命令管理的方法
Mar 12 Python
八大排序算法的Python实现
Jan 28 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
python爬虫获取多页天涯帖子
Feb 23 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
django实现用户注册实例讲解
Oct 30 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
Python接口自动化测试框架运行原理及流程
Nov 30 Python
pycharm 复制代码出现空格的解决方式
Jan 15 Python
七个Python必备的GUI库
Apr 27 Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 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 Hash函数,增强密码安全
2011/02/25 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
在Python中操作字典之clear()方法的使用
2015/05/21 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
基于python实现从尾到头打印链表
2019/11/02 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
生产车间主任的个人自我鉴定
2013/10/25 职场文书
电子信息工程自荐信
2014/05/26 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
教师听课学习心得体会
2016/01/15 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
Python实现信息管理系统
2022/06/05 Python