日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python:变身超级赛亚人

發(fā)布時間:2024/1/8 python 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python:变身超级赛亚人 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python:變身超級賽亞人

  • 思路
  • 金色頭發(fā)
  • 添加頭發(fā)
  • 電弧特效
  • 代碼下載

上周六搞了個修煉寫輪眼,利用python代碼定位眼球再貼圖,有點太粗糙。今兒又周末,效果升級下,玩?zhèn)€變身超級賽亞人——

預(yù)期是動態(tài)顯示變身后的金色頭發(fā)、光芒和周圍附帶的電弧,以下是最終效果:

展示視頻鏈接:https://v.qq.com/x/page/f1359rshz00.html
視頻中可以看到,金色頭發(fā)可以根據(jù)面部大小進(jìn)行自動調(diào)整,“光芒”在頭發(fā)外圍弱弱展現(xiàn),電弧也算是動態(tài)變換,勉強(qiáng)達(dá)成目標(biāo)

思路

在Python代碼中通過opencv啟用攝像頭拍攝,對獲取到的圖像通過dlib模塊進(jìn)行面部識別,之后利用PIL模塊進(jìn)行圖像處理,添加金色賽亞人頭發(fā)。因為攝像頭一直處于獲取圖像的while循環(huán)中,通過對不同圖片中添加不同形態(tài)的電弧圖像,形成最終視頻中動態(tài)電弧效果。

金色頭發(fā)

說到這個頭發(fā),對某度我真是無語,最終不得不英文搜到了目標(biāo):

OK,搞定,我選擇的是第五個圖片,下載后是白底jpg格式,先利用Photoshop將其改為背景透明的png格式:

為了加發(fā)光特效,我是選用的Win10自帶的畫圖3D軟件,其中的噴霧罐效果,在頭發(fā)外圍加了一圈黃色噴霧:

添加頭發(fā)

至于面部識別,我們還是選用前幾篇反復(fù)提到的dlib模塊。

dlib是一個包含機(jī)器學(xué)習(xí)算法的開源工具包。目前Dlib已經(jīng)被廣泛的用在行業(yè)和學(xué)術(shù)領(lǐng)域,包括機(jī)器人,嵌入式設(shè)備,移動電話和大型高性能計算環(huán)境。

我們先將頭發(fā)縮放添加到dlib的面部模式中:

調(diào)整位置,并根據(jù)面部識別到的臉部尺寸對頭發(fā)圖片大小進(jìn)行調(diào)整,計算頭發(fā)在攝像頭圖像中的添加位置。

#獲取面部模式 landmarks = predictor(gray, face) #定位面部左上角點坐標(biāo) x1,y1 = landmarks.part(0).x, landmarks.part(0).y # 定位面部右上角點坐標(biāo) x2, y2 = landmarks.part(16).x, landmarks.part(16).y #計算面部寬度 d = math.sqrt((x2-x1)**2+(y2-y1)**2) #根據(jù)面部寬度計算金色頭發(fā)尺寸 size = int(d / 236 * 439) #對頭發(fā)圖片縮放 resized = adding.resize((size,size)) #在合適位置添加頭發(fā)圖片 im.paste(resized,(int(x1-d*86/236),int(y1-d*394/236)),resized)

做完頭發(fā)效果如圖:

電弧特效

因為這是通過攝像頭一直在抓取圖像,那么只要這一刻和下一刻處理后的電弧圖像不一致,就會產(chǎn)生動態(tài)電弧的效果。所以實現(xiàn)方式就是準(zhǔn)備些背景透明的電弧圖片,在代碼中隨機(jī)選取進(jìn)行縮放后添加到圖像中。

針對不同的位置,我將電弧分為三組(其實是通過同一組旋轉(zhuǎn)變換Ps成三組的),l1-l4是放在左側(cè)的,r1-r4是右側(cè),t1-t4是頂部位置的。對抓取到的頭像,隨機(jī)添加電弧圖片:

#電弧圖片定義 lightlist = ["l1.png","l2.png","l3.png","l4.png"] rightlist = ["r1.png","r2.png","r3.png","r4.png"] toplist = ["t1.png","t2.png","t3.png","t4.png"]#電弧尺寸 lightsize = int(d/2) #隨機(jī)獲取電弧圖片 ligntning = Image.open(lightlist[random.randint(0, 3)]) #對電弧進(jìn)行縮放 relight = ligntning.resize((lightsize, lightsize)) #找到合適位置添加電弧圖片 im.paste(relight,(int(x1-d*60/236),int(y1-d*380/236)),relight)

最終效果截圖:

下一時刻:

可以對比,電弧實現(xiàn)了不同形態(tài)的變換展示~

代碼下載

超級賽亞人代碼及素材

網(wǎng)盤下載鏈接:https://pan.baidu.com/s/1wV6SbnYEwpRaw6rkoWLA0Q
提取碼:4zzp

Github代碼下載鏈接: https://github.com/pengfexue2/supersaiyan.git
若通過GitHub下載代碼,需要通過README.md中的鏈接下載面部識別要用到的dat文件

代碼已添加詳細(xì)注釋。

最后,歡迎關(guān)注我記錄學(xué)習(xí) Python、前端以及微信小程序開發(fā)的公眾號哈~

總結(jié)

以上是生活随笔為你收集整理的Python:变身超级赛亚人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。