Python:变身超级赛亚人
Python:變身超級賽亞人
- 思路
- 金色頭發
- 添加頭發
- 電弧特效
- 代碼下載
上周六搞了個修煉寫輪眼,利用python代碼定位眼球再貼圖,有點太粗糙。今兒又周末,效果升級下,玩個變身超級賽亞人——
預期是動態顯示變身后的金色頭發、光芒和周圍附帶的電弧,以下是最終效果:
展示視頻鏈接:https://v.qq.com/x/page/f1359rshz00.html
視頻中可以看到,金色頭發可以根據面部大小進行自動調整,“光芒”在頭發外圍弱弱展現,電弧也算是動態變換,勉強達成目標
思路
在Python代碼中通過opencv啟用攝像頭拍攝,對獲取到的圖像通過dlib模塊進行面部識別,之后利用PIL模塊進行圖像處理,添加金色賽亞人頭發。因為攝像頭一直處于獲取圖像的while循環中,通過對不同圖片中添加不同形態的電弧圖像,形成最終視頻中動態電弧效果。
金色頭發
說到這個頭發,對某度我真是無語,最終不得不英文搜到了目標:
OK,搞定,我選擇的是第五個圖片,下載后是白底jpg格式,先利用Photoshop將其改為背景透明的png格式:
為了加發光特效,我是選用的Win10自帶的畫圖3D軟件,其中的噴霧罐效果,在頭發外圍加了一圈黃色噴霧:
添加頭發
至于面部識別,我們還是選用前幾篇反復提到的dlib模塊。
dlib是一個包含機器學習算法的開源工具包。目前Dlib已經被廣泛的用在行業和學術領域,包括機器人,嵌入式設備,移動電話和大型高性能計算環境。
我們先將頭發縮放添加到dlib的面部模式中:
調整位置,并根據面部識別到的臉部尺寸對頭發圖片大小進行調整,計算頭發在攝像頭圖像中的添加位置。
做完頭發效果如圖:
電弧特效
因為這是通過攝像頭一直在抓取圖像,那么只要這一刻和下一刻處理后的電弧圖像不一致,就會產生動態電弧的效果。所以實現方式就是準備些背景透明的電弧圖片,在代碼中隨機選取進行縮放后添加到圖像中。
針對不同的位置,我將電弧分為三組(其實是通過同一組旋轉變換Ps成三組的),l1-l4是放在左側的,r1-r4是右側,t1-t4是頂部位置的。對抓取到的頭像,隨機添加電弧圖片:
最終效果截圖:
下一時刻:
可以對比,電弧實現了不同形態的變換展示~
代碼下載
超級賽亞人代碼及素材
網盤下載鏈接:https://pan.baidu.com/s/1wV6SbnYEwpRaw6rkoWLA0Q
提取碼:4zzp
Github代碼下載鏈接: https://github.com/pengfexue2/supersaiyan.git
若通過GitHub下載代碼,需要通過README.md中的鏈接下載面部識別要用到的dat文件
代碼已添加詳細注釋。
最后,歡迎關注我記錄學習 Python、前端以及微信小程序開發的公眾號哈~
總結
以上是生活随笔為你收集整理的Python:变身超级赛亚人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux- 系统随你玩之--文本、字符
- 下一篇: 应用程序域基础