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(一)Python环境安装
Aug 20 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Python实现购物系统(示例讲解)
Sep 13 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
详解python实现交叉验证法与留出法
Jul 11 Python
centos7中安装python3.6.4的教程
Dec 11 Python
pytorch 自定义参数不更新方式
Jan 06 Python
jenkins+python自动化测试持续集成教程
May 12 Python
用于ETL的Python数据转换工具详解
Jul 21 Python
解决numpy数组互换两行及赋值的问题
Apr 17 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单例模式详细介绍
2015/07/01 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
vue ssr 指南详读
2018/06/29 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
Python实现自动整理文件的脚本
2020/12/17 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
HTML5实现预览本地图片
2016/02/17 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
DTD的含义以及作用
2014/01/26 面试题
红色故事演讲稿
2014/05/22 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
小学科学教学计划
2015/01/21 职场文书
慈善募捐倡议书
2015/04/27 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
MySQL库表名大小写的选择
2021/06/05 MySQL
德生2P3收音机开箱评测
2022/04/30 无线电