邁克爾·安多斯(Michael Anthonysz)曾在2019年用Python和OpenCV實現了用顏料畫蒙娜麗莎,但若是不想動手實際繪畫,Python也能實現虛擬繪畫。
首先需要導入三個庫:PIL、numpy、matplotlib。
from PIL import Image import numpy as np import matplotlib.pyplot as plt
然后,我們可以通過pillow庫的open
方法打開一張照片并顯示在控制臺上:
img = Image.open('mona_lisa.jpg') img.show()
這時候,我們可以看到蒙娜麗莎的畫像,但是,如果我們想根據這個畫像進行繪畫,我們需要先將它轉換成numpy數組。
img_np = np.array(img)
為了更好地可視化這個圖像,我們需要考慮展示色彩模式。RGB模式是我們在Python繪制和處理圖像時常用的模式。為了轉換圖像的色彩空間,我們需要調用imshow
方法,并指定色彩模式:
plt.imshow(img_np, cmap='gray') plt.show()
我們可以看到一個黑白的蒙娜麗莎。
至此,我們開始繪制蒙娜麗莎了。這里使用了先前導入的matplotlib庫。
def draw_mona_lisa(): fig,ax = plt.subplots(1) ax.imshow(img_np) draw_points = np.array([[310, 170], [570, 170], [440, 290], [365, 475], [515, 475]]) # 臉輪廓 ax.plot([270, 370], [215, 215], color='black', linewidth=7) ax.plot([255, 392], [265, 265], color='black', linewidth=5) ax.plot([275, 397], [320, 320], color='black', linewidth=3) ax.plot([235, 377], [380, 380], color='black', linewidth=3) ax.plot([270, 340], [442, 442], color='black', linewidth=5) ax.plot([450, 550], [215, 215], color='black', linewidth=7) ax.plot([440, 605], [265, 265], color='black', linewidth=5) ax.plot([415, 590], [315, 315], color='black', linewidth=3) ax.plot([420, 570], [380, 380], color='black', linewidth=3) ax.plot([470, 550], [442, 442], color='black', linewidth=5) # 眼睛 ax.plot(draw_points[0:2][:, 0], draw_points[0:2][:, 1], color='black', linewidth=4) ax.plot(draw_points[2:4][:, 0], draw_points[2:4][:, 1], color='black', linewidth=4) ax.plot(draw_points[0:3][:, 0], draw_points[0:3][:, 1], color='black', linewidth=3.5) ax.plot(draw_points[2:][:, 0], draw_points[2:][:, 1], color='black', linewidth=3.5) # 口罩 ax.plot([300, 560], [510, 510], color='black', linewidth=15) ax.plot([305, 555], [515, 515], color='white', linewidth=13) ax.axis('off') plt.show()
用draw_points
定義了蒙娜麗莎的眼睛的坐標點;接著,我們傳入坐標點和線寬,繪制蒙娜麗莎的輪廓和眼睛。最后,我們可以看到Python畫出了蒙娜麗莎。
draw_mona_lisa()