天天看點

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

對于《哈利波特》系列的電影,想必大家都非常的熟悉了,裡面各種奇幻的魔法,炫酷的道具讓小編我是十分的羨慕啊,小編從小就希望自己能夠有一個哈利的神器道具,魔法棒、飛天掃帚、亦或者是隐身衣。

雖然願望很美好,但是顯示卻是很骨幹。既然現實中無法獲得,但是我們可以利用Python來實作夢想,今天小編就帶領大家利用來實作一個“隐身衣”的功能。

01.先睹為快

為了幫助大家更好的了解這個Python視覺效果案例,我們錄制了視訊來給大家講解一下,先睹為快。

02.程式的原理

程式實作的原理其實很簡單,如下圖所示:

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

上圖中左邊的圖是我們的背景圖,所謂的背景圖就是圖中的黃色區域沒有任何目标,隻是單純的背景。而右上角的圖中,我們可以看到此時黃色背景區域有了一隻啄木鳥的存在,這就是我們的前景圖。

那麼我們此時為啄木鳥覆寫上紅色的外衣,而程式會檢測圖中的紅色目标,将它以背景圖所替代,如右下角所示,此時我們可以看到,啄木鳥就完成了隐身的功能。而為啄木鳥覆寫的紅色部分就起到了隐身衣的作用。

03.程式講解

上面小編解釋了“隐身衣”的原理,接下來我們來看一下程式是如何實作的吧,首先,小編規定了前景圖和背景圖,如下所示:

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

我們的目的就是将背景圖的滑鼠進行隐身。為了更好的檢測視訊或者圖檔中的“紅色”物體,需要将圖檔由BGR格式轉化為HSV格式,HSV是圖檔的一種顔色模型,其中H代表色調,在opencv中,用0到180度來度量,代表我們直覺看到的顔色,S表示的是飽和度,表示的是顔色的純度。而V表示的是亮度,表示的是圖檔的明暗程度。對于紅色的檢測,程式如下所示:

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

上述程式中,紅色的色調範圍分為兩段,分别是0~10度和170~180度兩個範圍,而飽和度的範圍為120~255的範圍,亮度的範圍為95~255的範圍。提取的結果如下圖所示:

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

可以看到,紅色物體已經基本提取完畢,但是存在誤檢測的地方,是以我們利用opencv提供的開運算來處理掉這部分誤檢測的地方。程式和結果如下圖所示:

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

上述的程式中,我們執行了開運算,也就是先将誤檢測的白色區域給腐蝕掉,然後再擴充白色的地方。處理之後,我們将黑白的部分颠倒,得到了程式下方的紅色檢測結果圖。

接下來我們就是将上面檢測到的紅色的部分利用我們的背景圖的來融合替換,程式和結果如下圖所示:

放個大招!老鳥用Python打造了一款哈利波特的“隐身衣”

上圖程式中的執行結果分别對應着下圖的1到3,可以看到:

  • 第一句程式執行後,獲得了前景圖中紅色部分覆寫的圖像;
  • 第二句程式執行後,得到的是剔除紅色部分後剩餘的圖檔;
  • 第三句程式執行後,是将圖檔1和圖檔2的結果進行了融合;

可以看到,融合後的圖檔3中,木樁上的滑鼠“隐身不見了”,這樣就達到了給滑鼠隐身的目的。

Python裡面的視覺效果和圖像處理是最有趣了,我們也寫過很多好玩的案例,有興趣的同學可以看一下往期熱門,小夥伴還等啥,操練起來。

end

視覺+圖像主題 熱門原創:

80行代碼!用Python做一個哆來A夢分身

用Python一鍵生成炫酷九宮格圖檔,火了朋友圈

熬了一夜!我用Python做了一個網站,幫小姐姐生成漫畫頭像

用Python實作Instagram濾鏡,變成百變女神!

有點玄乎!用Python分析《隐秘的角落》裡微表情

【Java遇見PythonGo】 由一位資深老碼農營運,混迹于世界500強外企多年的,做過開發,測試,項目管理,對技術比較癡迷,也是一位後端開發愛好者。
在這裡希望給大家分享一些Java,Python和Go語言的程式設計技巧 ,以及趣味實戰幹貨和面試經驗,程式員圈的趣事。歡迎喜歡Java,Python和Go的程式員關注。
Java遇見PythonGo


長按2秒,輸入:【面試】
擷取大廠Java面試資料

點這裡,進菜鳥學PythonB站大學營
           

繼續閱讀