0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过Python将故宫的建筑物图片,转化为手绘图

电子工程师 来源:lq 2019-02-19 09:26 次阅读

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

一下雪,北京就变成了北平,故宫就变成了紫禁城。八万张门票在雪花飘下来之前,便早已预订一空。

(图片来源:故宫官网版权归故宫官网所有)

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

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

一、概念与原理

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

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

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

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

以Sobel 梯度计算来解释:

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

二、图像的数组形式与变换

其中,需要用到的方法:

Image.open( ):打开图片

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

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

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

代码如下:

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

三、图像的手绘效果处理

实现思路步骤:

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、图像生成

具体详情代码如下:

fromPILimportImageimportnumpyasnpimportosimportjoinimporttimedefimage(sta,end,depths=10):a=np.asarray(Image.open(sta).convert('L')).astype('float')depth=depths#深度的取值范围(0-100),标准取10grad=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/Auni_y=grad_y/Auni_z=1./Avec_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)defmain():xs=10start_time=time.clock()startss=os.listdir(r"C:UsersAdministratorDesktopgugong")time.sleep(2)forstartsinstartss:start=''.join(starts)sta='C:/Users/Administrator/Desktop/gugong/'+startend='C:/Users/Administrator/Desktop/gugong/'+'HD_'+startimage(sta=sta,end=end,depths=xs)end_time=time.clock()print('程序运行了----'+str(end_time-start_time)+'秒')time.sleep(3)main()程序运行了----43.01828205879955秒#一共35张图片

最终效果图对比:

最后,你自己动手试试吧?通过此代码为自己画一张手绘图,也可以为自己的家乡或母校画。

参考资料

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

代码链接:

https://pan.baidu.com/s/1E_aZTRQWOzGV-2GV_iH43w

提取码:64z9

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像
    +关注

    关注

    2

    文章

    1083

    浏览量

    40414
  • 梯度
    +关注

    关注

    0

    文章

    30

    浏览量

    10309
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84449

原文标题:只需45秒,Python给故宫画一组手绘图!

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    雷直击建筑物时电流分布的电磁场数值分析pdf

    雷直击建筑物时电流分布的电磁场数值分析 摘要:本文利用一个简单的等效电路和一个电磁场模式研究了雷直击建筑物时的雷电流分布。利用计算电磁学代码(NEC-4)进行电磁场数值分析。通过
    发表于 10-13 08:56

    建筑物接地电阻的要求

    建筑物接地电阻的要求    依据GB50057-94(2000版)《建筑物防雷设计规范》第三章、建筑物的防雷措施;第二节、第一类防雷建筑物的防雷
    发表于 01-14 16:13

    建筑物火灾并非只是电线电缆之过

    有机建筑材料和物品有化为灰烬,甚至钢梁都能烧熔,任何阻燃电线电缆都无济于事。因此,查找火灾原因时,除了弄清楚前述短路情况之外,也不要在电线电缆的阻燃性能上打主意,况且有很多建筑物使用的不是阻燃电线电缆
    发表于 03-25 22:12

    如何用labview程序二维图片转化为比特序列?

    如何用labview程序二维图片转化为比特序列?
    发表于 05-16 11:13

    利用PythonPDF转化为图片的方法

    python的功能真是强大,可以做词云图、可以优雅地八卦、可以做游戏外挂、还可以PDF转化图片,这个功能你还不知道吧,赶紧随小编我一起来看看吧:之前收集了很多优秀的 PDF文档,但
    发表于 07-11 17:37

    ​iMX6UL工业级核心板在建筑物能耗管理系统中的应用方案

    。因此,节能建筑成了建筑行业的首要议题。最近十年来,伴随着电子技术的革命性进步和软件技术的不断完善,产生了通过各种不同的电子装置,结合软件技术,实现了对建筑物的能耗进行实时监控和管理。
    发表于 04-22 16:27

    大型水利水电工程建筑物三维可视化建模技术研究

    的三维空间位置可以通过Q(x,y,z)表示,而两个点对象的三维空间位置即可以描述建筑物的线段对象,而多个线段对象共同组成线对象,线对象又可以描述几何要素,由此可见数据模型可以实现对规则或不规则
    发表于 10-22 08:09

    一种基于机器学习的建筑物分割掩模自动正则化和多边形化方法

    化处理,使其更加逼真,即有更多的直线型轮廓,在需要时构造直角。这是通过给定输入图像为真的概率的鉴别器和从鉴别器响应中学习创造更真实图像的生成器之间的相互作用来实现的。最后,从正则化的建筑物分割结果中训练
    发表于 09-01 07:19

    建筑物防雷保护设计浅析

    摘要:本文就设计中建筑物防雷保护在防直击雷、雷电波侵入以及相应的解决措施做了一些分析。 关键词:建筑物 防雷保护 随着现代社会的发展,建筑物的规模不断扩大,
    发表于 11-18 11:02 22次下载

    建筑物的泛光照明设计

     通常所说的泛光照明是指建筑物的立面照明。建筑物泛光照明的效果,不仅取决于泛光灯具和建筑物表面材质,还取决于设计人员的构思、经验、艺术底蕴和欣赏能力。照明设计
    发表于 01-19 14:40 14次下载

    联网转化了人物对建筑物的认知,并缩减运营开销且更加环保

    就最基本的层面上而言,我们希望建筑物(无论是简陋居所或是现代的钢筋玻璃结构)可以为住户提供一个舒适的空间。联网(IoT)转化了人物对建筑物的认知,让人意识到那不只是住户的居住“容器”
    发表于 05-24 08:24 1291次阅读

    建筑物联网市场由于什么增长的

    从项目类型来看,建筑物联网市场由硬件、软件以及三大部分组成,在预测期内,软件部分预计主导这个建筑物联网市场。
    发表于 02-23 20:43 894次阅读

    建筑物防雷工程的设计与施工

    本文会介绍建筑物防雷工程的设计与施工的基本原理、方法和要求,以及一些典型的案例分析。建筑物防雷工程是为了保护建筑物及其内部设备、人员和财产免受雷电危害而采取的一系列技术措施。建筑物防雷
    的头像 发表于 07-07 10:58 662次阅读
    <b class='flag-5'>建筑物</b>防雷工程的设计与施工

    建筑物防雷等级分为几类

    建筑物的防雷等级是指建筑物所需的防雷保护措施的等级划分。根据国家标准GB 50057-2010《建筑物防雷设计规范》1,建筑物应根据建筑物
    的头像 发表于 11-06 09:58 3163次阅读
    <b class='flag-5'>建筑物</b>防雷等级分为几类

    建筑物防雷检测安全接地应用解决方案

    雷电是一种自然现象,具有极高的电压和电流,对建筑物及其内部设备、人员和财产可能造成严重的危害,如火灾、爆炸、电击、电磁干扰等。因此,建筑物必须采取有效的防雷措施,以保障建筑物的安全和可靠运行。
    的头像 发表于 01-24 15:07 428次阅读
    <b class='flag-5'>建筑物</b>防雷检测安全接地应用解决方案