返回顶部
首页 > 资讯 > 后端开发 > Python >如何用Python画了一组手绘图
  • 840
分享到

如何用Python画了一组手绘图

2023-06-02 09:06:39 840人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

今天就跟大家聊聊有关如何用python画了一组手绘图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这几天,许多城市,迎来了2019年的第一场雪13日早晨,当北京市民拉开窗帘时发现,窗

今天就跟大家聊聊有关如何用python画了一组手绘图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

这几天,许多城市,迎来了2019年的第一场雪

13日早晨,当北京市民拉开窗帘时发现,窗外雪花纷纷扬扬在空中飘落

而且越下越大,树上、草地、屋顶、道路上...都落满雪花

京城银装素裹,这是今冬以来北京迎来的第二场降雪

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

八万张门票在雪花飘下来之前,便早已预订一空

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

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

如何用Python画了一组手绘图

一、概念与原理

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

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

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

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

以Sobel 梯度计算来解释:

首先计算出 如何用Python画了一组手绘图如何用Python画了一组手绘图,然后计算梯度角 

如何用Python画了一组手绘图梯度方向及图像灰度增大的方向,其中梯度方向的梯度夹角大于平坦区域的梯度夹角。如下图所示,灰度值增加的方向梯度夹角大,此时梯度夹角大的方向为梯度方向。对应在图像中寻找某一点的梯度方向即通过计算该点与其8邻域点的梯度角,梯度角最大即为梯度方向。

如何用Python画了一组手绘图

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

如何用Python画了一组手绘图

其中,需要用到的方法:

  • Image.open( ): 打开图片

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

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

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

代码如下:

from PIL import Image
import 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)分别表示高度,宽度

三、图像的手绘效果处理

实现思路步骤:

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=grad
grad_x = grad_x * depth / 100.#对grad_x值进行归一化
grad_y = grad_y * depth / 100.#对grad_y值进行归一化

2、构造guan光源效果

设计一个位于图像斜上方的虚拟光源
光源相对于图像的视角为Elevation,方位角为Azimuth
建立光源对各点梯度值的影响函数
运算出各点的新像素值

如何用Python画了一组手绘图

其中:

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

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

3、梯度归一化

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

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

4、图像生成

具体详情代码如下:

from PIL import Image
import numpy as np
import os
import join
import 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画了一组手绘图

其他图片就不一一列举。

看完上述内容,你们对如何用Python画了一组手绘图有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。

--结束END--

本文标题: 如何用Python画了一组手绘图

本文链接: https://lsjlt.com/news/229638.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何用Python画了一组手绘图
    今天就跟大家聊聊有关如何用Python画了一组手绘图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这几天,许多城市,迎来了2019年的第一场雪13日早晨,当北京市民拉开窗帘时发现,窗...
    99+
    2023-06-02
  • python利用scatter绘画散点图
    scatter绘画散点图代码如下: import matplotlib.pyplot  as plt plt.scatter(x,y,                 s = 20 ...
    99+
    2024-04-02
  • 如何通过python-turtle库实现绘制图画
    这篇文章给大家分享的是有关如何通过python-turtle库实现绘制图画的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 图1第一个图是蚊香,感兴趣的小伙伴可以自己尝试在python中用turtle库绘制一下。...
    99+
    2023-06-22
  • Python利用Turtle绘画简单图形
    目录前期准备基本函数与用法绘画图形1.画一个正方形2.画一个三角形3.画一个八角星4.画一个八边形5.其他图形No.1、多彩的五角星No.2、多彩的八角星No.3、四圆镶嵌No.4、...
    99+
    2024-04-02
  • 手把手教你python画图(精简实例,一
    1、不叨叨,直接上代码 import matplotlib.pyplot as plt x = [1,2,3,4,5] y = [0,3,2,7,9] plt.figure() plt.plot(x, y,'r-', lw =5) ...
    99+
    2023-01-31
    画图 手把手教你 实例
  • 怎么使用python sns.countplot()绘画条形图
    这篇文章主要介绍了怎么使用python sns.countplot()绘画条形图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用python sns.countplot()绘画条形图文...
    99+
    2023-07-02
  • python怎么利用scatter绘画散点图
    这篇文章主要介绍了python怎么利用scatter绘画散点图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python怎么利用scatter绘画散点图文章都会有所收获,下面我们一起来看看吧。scatter绘画...
    99+
    2023-07-02
  • 如何用Python绘制一个仿黑洞图像
    本篇内容主要讲解“如何用Python绘制一个仿黑洞图像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用Python绘制一个仿黑洞图像”吧!单位制利用einsteinpy模块中的Shadow类...
    99+
    2023-07-05
  • python matplotlib绘画十一种常见数据分析图
    目录1. 折线图2. 散点图3. 直方图 4. 饼图5. 箱线图 6.概率图 7.雷达图 8.流向图 9.绘图中的表格设置 ...
    99+
    2024-04-02
  • Python如何随数据更新实时画图?Python实时动态绘图
    在数据分析和可视化场景中,我们常常需要实现实时动态图表,比如每分钟读取数据库新的记录,及时更新图表显示最新数据,而不是静态显示某个时间点的数据。本文将介绍使用Python matploblib库的animation功能实现实时动态绘图的方法...
    99+
    2023-09-16
    python matplotlib 开发语言
  • Python中如何使用matplotlib绘图建立画布及坐标系
    小编给大家分享一下Python中如何使用matplotlib绘图建立画布及坐标系,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、建立画布import ...
    99+
    2023-06-22
  • 如何利用python turtle绘图自定义画布背景颜色
    目录python turtle自定义画布背景色python turtle设置背景图片总结python turtle自定义画布背景色 turtle是python一个简单好用的绘图包,它...
    99+
    2024-04-02
  • 如何使用Python画几何图形动画
    要使用Python来绘制几何图形动画,你可以使用一些库来帮助你完成这个任务,如matplotlib、pygame或turtle。下面...
    99+
    2023-08-20
    Python
  • word画的图如何组合成一个整体
    将Word中的多个图形组合成一个整体,可以通过以下步骤来实现:1. 打开Word文档并插入所有需要组合的图形。2. 选择第一个图形,...
    99+
    2023-09-11
    word
  • 一文教你如何使用Python绘制瀑布图
    目录前期准备方法一:waterfall_ax方法二:waterfall_chart方法三:plotly什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程...
    99+
    2023-05-16
    Python绘制瀑布图 Python 瀑布图
  • 如何用python绘制雷达图
    目录一、比较汽车性能 二、比较不同城市近期天气状况雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法,雷达图通常用于综合分析多个指标,具有...
    99+
    2024-04-02
  • 如何用python绘制柱形图
    这篇文章主要介绍了如何用python绘制柱形图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何用python绘制柱形图文章都会有所收获,下面我们一起来看看吧。#柱形图import pandasimp...
    99+
    2023-06-30
  • html5如何调用绘图api画简单的圆形
    这篇文章将为大家详细讲解有关html5如何调用绘图api画简单的圆形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 代码如下:<!DOCTYPE htm...
    99+
    2024-04-02
  • 数据库中如何查看锁的哪个绘画阻塞了哪个绘画
    这篇文章主要介绍了数据库中如何查看锁的哪个绘画阻塞了哪个绘画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 查...
    99+
    2024-04-02
  • python如何绘制饼图
    小编给大家分享一下python如何绘制饼图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用法matplotlib.pyplot.pie(x, explo...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作