這兩天,冬奧會的吉祥物“冰墩墩”可是火出了圈,說好的“一戶一墩,實際卻是一墩難求,今天早晨就有個同事一早去排隊買給對象。
今天來個輕松的,用Python畫一個絕對可愛的冰墩墩,代碼太長,只展示部分,后面可以在Github獲取完整內容。
我試了下大概十分鍾搞定,回家哄哄小朋友還是可以的。
關於Turtle 庫
Turtle庫是Python中的一個繪制圖像的函數庫,turtle就是一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,根據一組函數指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪制圖形。
繪圖版冰墩墩
1、打開編輯器,創建一個BingDwenDwen.py文件,需要逐個坐標進行描繪,只展示一部分代碼:
# 調節繪制速度t.speed(10) # 左手t.penup()t.goto(177, 112) ... # 五環t.penup()t.goto(-5, -170)t.pendown()t.pencolor("blue")t.circle(6) t.pencolor("black")t.goto(-16, -160)# 冬奧會說明t.write("BEIJING 2022", font=('Arial', 10, 'bold italic'))t.hideturtle()
2、執行程序:
python BingDwenDwen.py
3、成功!
圖像識別版冰墩墩
Turtle是一個非常好用的自動繪圖工具庫,但是用它來畫圖需要提供大量的坐標點,需要反復的執行,代碼非常冗長,適合一些簡單的圖像描繪。
下面我們用計算機圖像識別,來自動獲取圖片的位置坐標幫助進行畫圖,復制一個更加高清的冰墩墩。
首先你需要一張冰墩墩的圖片,命名為bingdwendwen.png,和python代碼在同一個目錄下。
下面需要使用open-cv的庫,以下步驟如果你的機器已經安裝可以跳過:
1、安裝pip程序庫
如果你還未安裝pip,則可以使用以下方法來安裝,以下針對Mac系統,Windows系統可以搜索下相關命令:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下載安裝腳本 $ sudo python get-pip.py # 運行安裝腳本
注意:用哪個版本的 Python 運行安裝腳本,pip 就被關聯到哪個版本,如果是 Python3 則執行以下命令:
$ sudo python3 get-pip.py # 運行安裝腳本
一般情況 pip 對應的是 Python 2.7,pip3 對應的是 Python 3.x。
2、安裝opencv-python庫
opencv-python是一個圖像和視頻處理庫,官網如下 https://pypi.org/project/opencv-python/
可以在terminal輸入下面代碼直接安裝:
$ pip install opencv-python
命令行下使用pydoc命令查看安裝的Module:
在命令行下運行$ pydoc modules 即可查看。
3、添加代碼並且運行
# coding=UTF-8
# This Python file uses the following encoding: utf-8
import turtle as t
import cv2
t.title('BingDwenDwen_CV 公眾號:越哥聊IT')
t.getscreen().colormode(255)
# 調用opencv讀取並創建灰度圖像,按BGR順序
img = cv2.imread("bingdwendwen.png")[0: -2: 2]
width = len(img[0])
height = len(img)
t.setup(width=width / 2 + 100, height=height + 100)
t.pu()
t.goto(-width / 4 + 10, height / 2 - 10)
t.pd()
t.tracer(2000)
for k1, i in enumerate(img):
for j in i[::2]:
t.pencolor((j[0], j[1], j[2]))
t.fd(1)
t.pu()
t.goto(-width / 4 + 10, height / 2 - 10 - k1 - 1)
t.pd()
t.done()
這個代碼實際是讀取圖片,然后把坐標數據傳遞給Turtle,下面執行程序:
python BingDwenDwen_cv.py
獲取代碼:
需要代碼,可以在Git倉庫查看
https://github.com/bingyue/bing-dwen-dwen