開發工具
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
先睹為快
很多人學習python,不知道從何學起, 很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手, 很多已經做案例的人,卻不知道如何去學習更加高深的知識, 那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼! QQ群:701698587 歡迎加入,一起討論 一起學習!
修改所需繪制的圖片路徑:
?在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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341702.html
標籤:Python
