原文地址:python来画画第二弹! 作者: Charles的皮卡丘

好文章应该要让更多人看到。

开发工具

Python版本:3.6.4

相关模块:

cv2模块;

numpy模块;

pywin32模块;

bs4模块;

以及一些Python自带的模块。

其他:

potrace

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

参考资料

1.http://www.html-js.com/article/1628

2.https://zh.wikipedia.org/wiki/%E5%8F%AF%E7%B8%AE%E6%94%BE%E5%90%91%E9%87%8F%E5%9C%96%E5%BD%A2

3.https://www.cnblogs.com/hnfxs/p/3148483.html

先睹为快

修改所需绘制的图片路径:

在cmd窗口运行main.py文件即可。

效果如下:

原理简介

一. 实现步骤

首先读入原图:

其次将原图像的颜色数量通过K均值聚类降低到指定的数量,K值越大,运行速度越慢,但效果越佳:

每次取出聚类结果中的一种颜色并利用potrace将其转为SVG格式的图形,再解析该格式并用Python自带的turtle库画出来:

二. SVG格式

SVG,即可缩放矢量图形,是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG主要支持以下几种显示对象:

1.矢量显示对象,基本矢量显示对象包括矩形、圆、椭圆、多边形、直线、任意曲线等;

2.嵌入式外部图像,包括PNG、JPEG、SVG等;

3.文字对象。

更多关于SVG的技术细节请参考:

http://www.w3school.com.cn/svg/svg_intro.asp

三. Turtle库

这里推荐一份turtle库的文档:

https://www.rddoc.com/doc/Python/3.6.0/zh/library/turtle/

四. 贝塞尔曲线

画图时用到了贝塞尔曲线,这里简单介绍一下。

贝塞尔曲线的数学基础是伯恩斯坦多项式,其得名于法国工程师Pierre Bézier。

贝塞尔曲线控制简便却具有极强的描述能力,因此在工业设计领域应用广泛;同时,贝塞尔曲线在矢量图形学领域也占有重要的地位。今天我们最常见的一些矢量绘图软件(例如Flash,CorelDraw,PS等等)均提供了绘制贝塞尔曲线的功能。

线性公式:

给定点P0、P1,线性贝塞尔曲线是一条两点之间的直线,确定方式如下:

其实就是线性插值。

二次方公式:

给定点P0、P1和P2,二阶贝塞尔曲线的路径确定方式如下:

n次方公式:

给定点P0到Pn,n阶贝塞尔曲线的路径确定方式如下:

贝塞尔曲线的绘制方式(以二阶为例):

假设平面内不共线的三个点如下图所示:

在AB上选一点D,BC上选一点E,使得:

AD:AB=BE:BC。

连接DE:

在DE上选一点F,使得:

AD:AB=BE:BC=DF:DE

保证AD,AB,BE,BC,DF,DE之间的比例关系不变,让D点从A点运动到B点,则所有的点F构成的曲线即为二阶贝塞尔曲线:

n阶贝塞尔曲线的绘制方式类似,例如三阶和四阶:

That's all~

相关文件中提供了完整源代码和所需的工具,请自行下载使用。

链接:https://pan.baidu.com/s/1B01qxCzxpJcB8iOqu2PYHw 
 提取码:4ztk

利用Python算法画出美丽动人的妹子图像相关推荐

  1. python绘制繁花曲线代码_做个绘图仪,画出美丽的繁花曲线 | 上周实验回顾

    原标题:做个绘图仪,画出美丽的繁花曲线 | 上周实验回顾 在刚刚过去的周末,北京.上海.广州.深圳.杭州.南京的孩子们又在科学队长实验室玩嗨啦!一起来回顾一下吧~ 开眼时间 认识繁花曲线 纸币上的背景 ...

  2. 用python如何画出好看的地图

    最近正好在学空间数据处理,这次更一下用python如何画出好看的地图 下面主要是用 folium poltly geopandas+matplotlib 三种方式绘制地图 1.folium impor ...

  3. 写一个判断方程根的C语言程序,写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根....

    写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根. 答案 思路分析:主要考查含参问题的讨论方法及条件嵌套结构的应用.输入三个实数a,b,c,先判断a是否为零,当a≠0时 ...

  4. 计算机设计校园的简要教案,(最新整理)《画出美丽的校园》教学设计

    <(最新整理)<画出美丽的校园>教学设计>由会员分享,可在线阅读,更多相关<(最新整理)<画出美丽的校园>教学设计(7页珍藏版)>请在人人文库网上搜索. ...

  5. 利用matlab命令画出以下信号的波形,MATLAB实验报告

    文档收集于互联网,已重新整理排版.word 版本可编辑,有帮助欢迎下载支持. 1文档来源为:从网络收集整理.word 版本可编辑. 实验一 名称:连续时间信号分析 姓名:王嘉琦 学号:0636 班级: ...

  6. python画简便的图-python如何画出漂亮的地图?网友:教教我呗

    导入包,创建一副世界地图 不要错过 免费学习Python的机会,快来+688244617 import folium import pandas as pd # define the world ma ...

  7. python计算圆周率近似值_怎样利用python来计算出圆周率π-百度经验

    怎样利用python来计算出圆周率π? 方法/步骤 1 圆周率π是一个无理数,没有任何一个精确公式可以计算出π值,π的计算只能采用近似算法. 我们利用蒙特卡洛方法来求得π的近似值. 蒙特卡洛方法是利用 ...

  8. php画梯形,利用css来画出各种样式不同的梯形,html中梯形外框怎么做

    利用css来画出各种样式不同的梯形利用钢性铸铁来画出各种样式不同的梯形, 首先我们要知道一下四个非常重要的样式: (学习视频分享:css视频教程 border-buttom:设置下边框 border- ...

  9. 用Python代码画出灰太狼

    文章目录 简介 代码 运行效果 备注 简介 用python代码画出灰太狼,仅使用turtle库.如下: 绘画过程可以在下列平台查看: 抖音:用代码画灰太狼,不是一个合格的狼,但一定是合格的丈夫和父亲 ...

最新文章

  1. recyclerview 滑动到当前_Android recyclerview的滑动到指定的item
  2. React-生命周期杂记 1
  3. java设置窗口不可移动_Java – JDialog不可移动
  4. JVM学习笔记(二):垃圾收集
  5. 用Linux命令行实现删除和复制指定类型的文件
  6. 无法将该对象添加到ldap服务器_Minecraft 基岩版 Ubuntu服务器搭建(三)
  7. linux下共享win下文件夹权限问题,通过Samba从Windows向Linux系统传文件权限问题
  8. 安卓手机上最好的3个azw3阅读器
  9. 阿里云播放器的官方文档
  10. Android Studio 错误记录:If you already have a 64-bit JDK installed ,defined a JAVA_HOME variable..
  11. 云服务器被攻击了快速解决方案
  12. 作用域和作用域链的理解
  13. 打字练习。。又退步了
  14. 一文搞懂JVM架构:微信抢红包实战案例
  15. matlab保存所有图,Matlab中图片保存的5种方法
  16. Fast-MoCo: Boost Momentum-based Contrastive Learning with Combinatorial Patches
  17. python 实现获取与下载网页中图片的四种方案
  18. 重磅!道翰天琼解密认知智能核心秘密三大核心技术,机器人大脑API平台。
  19. 盘点2009年商场百货创意促销手段 秒杀当道
  20. 通信之自相关、互相关函数

热门文章

  1. UnityVR--机械臂场景6-三自由度逆向解算1
  2. xp 应用计算机设置在哪里打开,XP系统蓝牙在哪里设置呀(电脑的蓝牙如何打开?这样操作就可以了)...
  3. 如何按分别率清晰度来计算视频流量?720P 对应按分钟768M
  4. QT_简单时钟设计_看起来像那么回事高端大气上档次?
  5. web网页设计期末课程大作业~粉色的服装购物商城页面模板(HTML+CSS+JS)
  6. 身份证,手机号码打码显示
  7. KEIL MDK简介,如何安装KEIL MDK下载程序
  8. 【蓝桥杯嵌入式主板(G4)】第一章 软件环境搭建
  9. 三、镜头的选型(上)
  10. [九省联考 2018] 一双木棋chess