导读:最近故宫总能“摊上事”。

今天是元宵节,一批幸运鹅拿着在故宫门票预售网站瘫痪之前抢来的门票,夜游故宫,成为94年来第一批在故宫赏月的人。用这种方式过节,真是既时尚又怀旧,简直没sei了。不知道你去了没有?

昨夜今晨,北京又下了一场雪,前些天刷爆朋友圈的故宫雪景照,又出了续集。抢不到晚上赏月的门票,白天去看看雪景也是不错的选择。不知道你去了没有?

今天我们要说的就跟雪景有关……

作者:丁彦军

来源:恋习Python(ID:sldata2017)

一下雪,北京就变成了北平,故宫就变成了紫禁城。

看着朋友圈、微博好友都在纷纷晒图,小编只能羡慕不已。

▲图片来自微信公众号微故宫

不过,小编突然想到,可以通过Python将故宫的建筑物图片,转化为手绘图(素描效果)。效果图如下:

01 概念与原理

我们都知道手绘图效果的特征主要有:

  • 黑白灰色;边界线条较重;相同或相近色彩趋于白色;略有光源效果

核心原理:利用像素之间的梯度值和虚拟深度值对图像进行重构,根据灰度变化来模拟人类视觉的模拟程度。

把图像看成二维离散函数,灰度梯度其实就是这个二维离散函数的求导,用差分代替微分,求取图像的灰度梯度。常用的一些灰度梯度模板有:Roberts 梯度、Sobel 梯度、Prewitt 梯度、Laplacian 梯度。

以Sobel 梯度计算来解释:

首先计算出 ,然后计算梯度角梯度方向及图像灰度增大的方向,其中梯度方向的梯度夹角大于平坦区域的梯度夹角。如下图所示,灰度值增加的方向梯度夹角大,此时梯度夹角大的方向为梯度方向。对应在图像中寻找某一点的梯度方向即通过计算该点与其8邻域点的梯度角,梯度角最大即为梯度方向。

02 图像的数组形式与变换

其中,需要用到的方法:

  • Image.open( ): 打开图片

  • np.array( ) : 将图像转化为数组

  • convert("L"): 将图片转换成二维灰度图片

  • Image.fromarray( ): 将数组还原成图像uint8格式

代码如下:

from PIL import Imageimport numpy as np

im = Image.open(r"C:\Users\Administrator\Desktop\gugong\微信图片_20190216152248.jpg").convert('L')a=np.asarray(im).astype('float')print(a.shape,a.dtype)(1080, 608) float64#(1080, 608)分别表示高度,宽度

03 图像的手绘效果处理

实现思路步骤:

1. 梯度的重构

numpy的梯度函数的介绍:

  • np.gradient(a) : 计算数组a中元素的梯度,f为多维时,返回每个维度的梯度

  • 离散梯度: xy坐标轴连续三个x轴坐标对应的y轴值:a, b, c 其中b的梯度是(c-a)/2

  • 而c的梯度是: (c-b)/1

当为二维数组时,np.gradient(a) 得出两个数组,第一个数组对应最外层维度的梯度,第二个数组对应第二层维度的梯度。

代码如下:

grad=np.gradient(a)grad_x,grad_y=gradgrad_x = grad_x * depth / 100.#对grad_x值进行归一化grad_y = grad_y * depth / 100.#对grad_y值进行归一化

2. 构造guan光源效果

  • 设计一个位于图像斜上方的虚拟光源

  • 光源相对于图像的视角为Elevation,方位角为Azimuth

  • 建立光源对各点梯度值的影响函数

  • 运算出各点的新像素值

其中:

  • np.cos(evc.el) : 单位光线在地平面上的投射长度

  • dx,dy,dz :光源对x,y,z三方向的影响程度

3. 梯度归一化

  • 构造x和y轴梯度的三维归一化单位坐标系;

  • 梯度与光源相互作用,将梯度转化为灰度。

4. 图像生成

具体详情代码如下:

from PIL import Imageimport numpy as npimport osimport joinimport time

def image(sta,end,depths=10):    a = np.asarray(Image.open(sta).convert('L')).astype('float')    depth = depths  # 深度的取值范围(0-100),标准取10    grad = np.gradient(a)  # 取图像灰度的梯度值    grad_x, grad_y = grad  # 分别取横纵图像梯度值    grad_x = grad_x * depth / 100.#对grad_x值进行归一化    grad_y = grad_y * depth / 100.#对grad_y值进行归一化    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.cos(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)    im = Image.fromarray(b.astype('uint8'))  # 重构图像    im.save(end)

def main():    xs=10    start_time = time.clock()    startss = os.listdir(r"C:\Users\Administrator\Desktop\gugong")    time.sleep(2)    for starts in startss:        start = ''.join(starts)        sta = 'C:/Users/Administrator/Desktop/gugong/' + start        end = 'C:/Users/Administrator/Desktop/gugong/' + 'HD_' + start        image(sta=sta,end=end,depths=xs)

    end_time = time.clock()    print('程序运行了  ----' + str(end_time - start_time) + '   秒')    time.sleep(3)

main()程序运行了  ----43.01828205879955   秒  #一共35张图片

最终效果图对比:

▲原始图片来自微信公众号微故宫

其他图片就不一一列举。你也可以通过此代码为自己画一张手绘图;也可以为自己的家乡或母校画。

人生苦短,我用Python;

除了生娃,啥都能干!

参考资料:北京理工大学的嵩天老师的网络课程

http://www.icourse163.org/learn/BIT-1001870002?tid=1001963001#/learn/announce

据统计,99%的大咖都完成了这个神操作

更多精彩

在公众号后台对话框输入以下关键词

查看更多优质内容!

PPT | 报告 | 读书 | 书单

大数据 | 揭秘 | 人工智能 | AI

Python | 机器学习 | 深度学习 | 神经网络

可视化 | 区块链 | 干货 | 数学

猜你想看

  • 故宫首开夜场门票秒空官网崩溃:7本书让网站挺住

  • 《流浪地球》导演郭帆竟然“特别绝望”?

  • 7本书告诉你,为什么拯救“流浪地球”的是人类,不是AI?

  • 做决定前别拍脑袋:两个成功案例看懂A/B测试

Q: 来,给我们看看你的灵魂画作!

欢迎留言与大家分享

觉得不错,请把这篇文章分享给你的朋友

转载 / 投稿请联系:baiyu@hzbook.com

更多精彩,请在后台点击“历史文章”查看

只需45秒,用Python给故宫画一组雪景手绘图相关推荐

  1. python 画八角形步骤_只需45秒,Python给故宫画一组手绘图!

    原标题:只需45秒,Python给故宫画一组手绘图! 作者 |丁彦军 来源 |恋习Python(ID:sldata2017) 13日早晨,当北京市民拉开窗帘时发现,窗外雪花纷纷扬扬在空中飘落,而且越下 ...

  2. python 归一化_只需 45 秒,Python 给故宫画一组手绘图!

    作者 | 丁彦军 责编 | 伍杏玲 13日早晨,当北京市民拉开窗帘时发现,窗外雪花纷纷扬扬在空中飘落,而且越下越大,树上.草地.屋顶.道路上,都落满雪花.京城银装素裹,这是今冬以来北京迎来的第二场降雪 ...

  3. 只需 45 秒,Python 给故宫画一组手绘图!

    作者 | 丁彦军 责编 | 屠敏 13日早晨,当北京市民拉开窗帘时发现,窗外雪花纷纷扬扬在空中飘落,而且越下越大,树上.草地.屋顶.道路上,都落满雪花.京城银装素裹,这是今冬以来北京迎来的第二场降雪. ...

  4. python 画八角形步骤_只需 45 秒,Python 给故宫画一组手绘图!

    作者 |   丁彦军 责编 | 屠敏 13 日早晨,当北京市民拉开窗帘时发现,窗外雪花纷纷扬扬在空中飘落,而且越下越大,树上.草地.屋顶.道路上,都落满雪花.京城银装素裹,这是今冬以来北京迎来的第二场 ...

  5. 用python画函数的梯度图_只需45秒,用Python给故宫画一组雪景手绘图

    原标题:只需45秒,用Python给故宫画一组雪景手绘图 导读:最近故宫总能"摊上事". 今天是元宵节,一批幸运鹅拿着在故宫门票预售网站瘫痪之前抢来的门票,夜游故宫,成为94年来第 ...

  6. python移动文件的函数_移动并重命名2000个文件,用Python,只需3秒

    原标题:移动并重命名2000个文件,用Python,只需3秒 作者:陈熹.刘早起 来源:早起Python 今天介绍的案例是如何利用Python来 自动化移动.修改.重命名文件/夹,这样的操作在日常办公 ...

  7. 不可思议!英伟达新技术训练NeRF模型最快只需5秒,代码已开源

    英伟达将训练 NeRF 模型从 5 小时缩至 5 秒. 你曾想过在 5 秒内训练完成狐狸的 NeRF 模型吗?现在英伟达做到了! 令人不可思议的是,就如谷歌科学家 Jon Barron 在推特上表示的 ...

  8. 合并excel文件 C语言,再见Ctrl + C!合并100个Excel表格,只需30秒!

    原标题:再见Ctrl + C!合并100个Excel表格,只需30秒! 哈喽,大家好!在上篇文章< 你复制粘贴的那么认真,难怪天天加班[Excel教程] >中,我们给大家介绍了4种拆分工作 ...

  9. 应用悄悄拿走你的隐私做了什么?只需30秒这个AI给你答案

    安妮 编译自 Futurism 量子位 出品 | 公众号 QbitAI "我已经阅读并了解--"可能是当代青年定期撒下的一个谎. 可能你深有体会. 几乎每个下载的App都有用户协议 ...

  10. 微信哪个电话能转人工服务器,如何联系微信人工客服?掌握好窍门,只需30秒可接通,亲测有效...

    原标题:如何联系微信人工客服?掌握好窍门,只需30秒可接通,亲测有效 很多人都会使用微信,但是使用过程中难免会遇到问题,比如账号封号.转错账.支付问题等.如果在机器人自动回答中解决不了问题,想找人工客 ...

最新文章

  1. 如何使用OpenCV实现图像均衡???
  2. R语言使用ggpubr包绘制出版社、编辑、审稿人要求的可视化图形实战
  3. 百度定位SDK的使用示例
  4. ms sql 带自增列 带外键约束 数据导入导出
  5. BZOJ5073 小A的咒语(动态规划)
  6. WPF视频会议系统资料
  7. 假期周进度总结(三)
  8. opengl 如何加阴影_一步步学OpenGL(23) -《阴影贴图1》
  9. 极客大学架构师训练营 JVM虚拟机原理 JVM垃圾回收原理 Java编程优化 秒杀 第九次作业
  10. 弹性波波长计算公式_弹性波,时域显式接口简介
  11. Swift 雷达动画
  12. 房价必然上涨的N个原因
  13. 在PHP中用sleep导致诡异事件
  14. YouTube 双字幕浏览器辅助
  15. java大作业私人管家系统_微软蓝天云平台:中小企业的私人管家
  16. 《黑客秘笈——渗透测试实用指南(第2版)》—第2章2.3节外部或内部主动式信息搜集...
  17. echart 自适应屏幕大小
  18. Android x86 4.4-r1 PC正式版发布
  19. 计算机通过华为手机上网,华为手机网络怎么共享给电脑(必知网络共享3步曲)...
  20. 讲座:与迷茫为友的成长(贺利坚老师,烟台大学)——完整讲座PPT,精彩与动画媲美

热门文章

  1. 黑群晖DSM 6.1网卡支持列表
  2. 图像识别距离算法matlab
  3. 【matlab图像处理】图像处理工具箱(1)
  4. 主成分与因子分析异同_主成分和因子分析原理及比较
  5. html设置鼠标指针的形状,CSS/HTML改变鼠标指针形状方法 属性说明
  6. php版寿星万年历,寿星万年历电脑版
  7. Python爬虫进行Web数据挖掘总结和分析 这是我见过最牛逼的教程
  8. 数学建模番外篇2:作图练习-美赛2020E题
  9. 软件系统概要设计的三大要素
  10. skyline在海洋及管线类3DGIS应用综述