openCV【實(shí)踐系列】3——使用OpenCV進(jìn)行無縫克隆

使用OpenCV進(jìn)行無縫克隆


圖1:無縫克隆示例:一架飛機(jī)克隆到傍晚天空的照片中

OpenCV 3中引入的令人興奮的新功能之一稱為無縫克隆瘾英。使用此新功能捍掺,你可以從一個(gè)圖像復(fù)制對象厨内,并將其粘貼到另一個(gè)圖像中捞奕,使組合看起來無縫且自然容燕。上面的圖像是使用天空和飛機(jī)的場景創(chuàng)建的琅拌。如果我簡單地將飛機(jī)圖像覆蓋在天空圖像的頂部缨伊,結(jié)果將顯得荒謬(參見圖2)


圖2:飛機(jī)重疊的天空

當(dāng)然,在他們正確的思想中进宝,沒有人會(huì)做這樣的組合刻坊。你顯然會(huì)仔細(xì)地掩蓋圖像,也許在Photoshop中花了半天后得到一張如圖3所示的圖像党晋。


圖3:天空圖像谭胚,飛機(jī)上覆蓋著仔細(xì)的遮蔽

如果你是一名藝術(shù)家徐块,你將花費(fèi)另外半天時(shí)間,仔細(xì)調(diào)整飛機(jī)上的燈光灾而,使其成為天空圖像的照明胡控,并創(chuàng)造出美麗的構(gòu)圖。但是有兩個(gè)問題旁趟。首先昼激,你沒有半天的時(shí)間。其次锡搜,你可能不是藝術(shù)家橙困!

如果你能在飛機(jī)周圍制作一個(gè)非常粗糙的面具,然后創(chuàng)造一個(gè)看起來像圖1的漂亮構(gòu)圖余爆,那不是很酷嗎纷宇?如果你只用10行代碼就能做到這一點(diǎn)怎么辦??在我向您展示代碼之前蛾方,讓我花一個(gè)小時(shí)來解釋無縫克隆背后令人興奮的理論像捶。我們先來看看代碼吧。

無縫克隆實(shí)例:

快速瀏覽一下python的用法

# 導(dǎo)入相關(guān)的包

import cv2

import numpy as np

# 讀圖像

src = cv2.imread("images/airplane.jpg")

dst = cv2.imread("images/sky.jpg")

# 構(gòu)建一個(gè)在飛機(jī)周圍粗略的掩模

src_mask = np.zeros(src.shape, src.dtype)

poly = np.array([ [4,80], [30,54], [151,63], [254,37], [298,90], [272,134], [43,122] ], np.int32)

cv2.fillPoly(src_mask, [poly], (255, 255, 255))

# 這是飛機(jī)的中心點(diǎn)

center = (800,100)

# 無縫克隆.

output = cv2.seamlessClone(src, dst, src_mask, center, cv2.NORMAL_CLONE)

# 保存結(jié)果

cv2.imwrite("images/opencv-seamless-cloning-example.jpg", output);

復(fù)制代碼

上面的例子中桩砰,我使用的克隆類型(標(biāo)志)是NORMAL_CLONE拓春。還有另一種類型MIXED_CLONE,與NORMAL_CLONE略有不同亚隅。讓我們看看這兩種類型在細(xì)節(jié)上有何不同硼莽。

正常克隆(NORMAL_CLONE)與混合克隆(MIXED_CLONE)

我有一個(gè)5歲的兒子煮纵,如果我對他很好懂鸵,他會(huì)給我“我愛你”的門票。有一段時(shí)間行疏,孩子們渴望得到父母的認(rèn)可匆光,但這些天父母們必須盡力賺取“我愛你”的門票。無論如何酿联,回到克隆终息。我將在計(jì)算機(jī)視覺服務(wù)中使用其中一個(gè)“我愛你的門票”(參見圖4)。

圖4:“我愛你”門票

讓我們嘗試將這個(gè)圖像克隆到圖5所示的木質(zhì)紋理上贞让。我們將是懶惰的并且使用全白的掩模周崭,并將源圖像克隆在木質(zhì)紋理圖像的中心。

# 導(dǎo)入相關(guān)的包

import cv2

import numpy as np

# 讀圖像:源圖像將被克隆到目標(biāo)圖像上

im = cv2.imread("images/wood-texture.jpg")

obj= cv2.imread("images/iloveyouticket.jpg")

# 構(gòu)建全白的掩模

mask = 255 * np.ones(obj.shape, obj.dtype)

# 源圖像在目標(biāo)圖像的中位置

width, height, channels = im.shape

center = (height/2, width/2)

# 將源圖像無縫克隆到目標(biāo)圖像上并將結(jié)果輸出

normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)

mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)

# 保存結(jié)果

cv2.imwrite("images/opencv-normal-clone-example.jpg", normal_clone)

cv2.imwrite("images/opencv-mixed-clone-example.jpg", mixed_clone)

復(fù)制代碼

正吃牛克隆結(jié)果

如果我們使用NORMAL_CLONE標(biāo)志使用正承颍克隆,我們將得到如圖6所示的結(jié)果《捉悖現(xiàn)在我們沒有使用好的掩模磨取,你可以看到單詞“I”和“Love”之間以及“you”和“Paa”之間的過度平滑人柿。當(dāng)然我們很懶。我們可以創(chuàng)建一個(gè)粗糙的掩模并改進(jìn)結(jié)果忙厌。但如果你懶惰而聰明凫岖,你會(huì)使用混合克隆。

圖6:OpenCV正撤昃唬克隆示例


混合克隆結(jié)果:

在正掣绶牛克隆中,源圖像的紋理(漸變)將保留在克隆區(qū)域中爹土。在混合克隆中甥雕,克隆區(qū)域的紋理(梯度)由源圖像和目標(biāo)圖像的組合確定≌鸵穑混合克隆不會(huì)產(chǎn)生平滑區(qū)域社露,因?yàn)樗鼤?huì)選擇源圖像和目標(biāo)圖像之間的主要紋理(漸變)∏砟铮混合克隆的結(jié)果如圖7所示峭弟。請注意,“I”和“Love”以及“you”和“Paa”之間的紋理不再平滑脱拼。懶人歡呼瞒瘸!


圖7:OpenCV混合克隆示例

無縫克隆視頻結(jié)果

我拍攝了飛機(jī)和天空的圖像,并改變了飛機(jī)的位置來創(chuàng)建這個(gè)動(dòng)畫熄浓。MIXED_CLONE給出了更好的結(jié)果情臭,你幾乎沒有注意到任何文物。將300×194圖像(飛機(jī))克隆到1000×560圖像(天空)上大約需要0.4秒赌蔑。

地址https://youtu.be/Ico_zGP8X2U這個(gè)是youtube上的

Poisson Image Editing

OpenCV中的無縫克隆是由Patrick Perez俯在,Michel Gangnet和Andrew Blake撰寫的具有影響力的SIGGRAPH 2003論文題為“Poisson Image Editing”的實(shí)現(xiàn)。

現(xiàn)在我們知道如果我們使用精心創(chuàng)建的掩模將源圖像(飛機(jī))的強(qiáng)度(RGB值)與目標(biāo)圖像(天空)混合娃惯,我們將獲得如圖3所示的結(jié)果朝巫。本文的核心見解是使用圖像漸變而不是圖像強(qiáng)度可以產(chǎn)生更真實(shí)的結(jié)果。在無縫克隆之后石景,掩模區(qū)域中的結(jié)果圖像的強(qiáng)度與掩模區(qū)域中的源區(qū)域的強(qiáng)度不同。相反拙吉,掩模區(qū)域中的結(jié)果圖像的梯度與掩模區(qū)域中的源區(qū)域的梯度大致相同潮孽。另外,在掩模區(qū)域的邊界處的結(jié)果圖像的強(qiáng)度與目標(biāo)圖像(天空)的強(qiáng)度相同筷黔。

作者表明往史,這是通過求解泊松方程來完成的,因此也就是論文的標(biāo)題 - Poisson Image Editing佛舱。該論文的理論和實(shí)現(xiàn)細(xì)節(jié)實(shí)際上非匙道酷挨决,但超出了本文的范圍。但是订歪,如果您閱讀論文并有疑問脖祈,請隨時(shí)在評論部分詢問。原文鏈接:https://bbs.easyaiforum.cn/thread-674-1-1.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刷晋,一起剝皮案震驚了整個(gè)濱河市盖高,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眼虱,老刑警劉巖喻奥,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捏悬,居然都是意外死亡撞蚕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門过牙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甥厦,“玉大人,你說我怎么就攤上這事抒和〗糜妫” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵摧莽,是天一觀的道長庙洼。 經(jīng)常有香客問我,道長镊辕,這世上最難降的妖魔是什么油够? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮征懈,結(jié)果婚禮上石咬,老公的妹妹穿的比我還像新娘。我一直安慰自己卖哎,他們只是感情好鬼悠,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布上岗。 她就那樣靜靜地躺著缺菌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刨裆。 梳的紋絲不亂的頭發(fā)上维贺,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天它掂,我揣著相機(jī)與錄音,去河邊找鬼溯泣。 笑死虐秋,一個(gè)胖子當(dāng)著我的面吹牛榕茧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播客给,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼用押,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了起愈?” 一聲冷哼從身側(cè)響起只恨,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抬虽,沒想到半個(gè)月后官觅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阐污,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年休涤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笛辟。...
    茶點(diǎn)故事閱讀 40,912評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡功氨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出手幢,到底是詐尸還是另有隱情捷凄,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布围来,位于F島的核電站跺涤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏监透。R本人自食惡果不足惜桶错,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胀蛮。 院中可真熱鬧院刁,春花似錦、人聲如沸粪狼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽再榄。三九已至阅虫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間不跟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工米碰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窝革,地道東北人购城。 一個(gè)月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像虐译,于是被迫代替她去往敵國和親瘪板。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評論 2 361