OpenCV實戰之AI照片背景替換
導語
不少人在生活中都有摳人像圖換背景的需求。那怎麼摳圖呢?
相信不少人第一時間就想到瞭 PS 摳圖大法,為瞭學會 PS 摳圖很多人還花費不少精力,而且學會後大傢想必都有共同感觸:PS 摳圖在制作摳圖選區這個步驟太耗費時間!!就跟我減肥似的!
今天木木子就手把手教大傢編寫一款摳圖人像技術——
這款小程序實現一鍵智能摳取人像圖的功能,非常強大!
比 PS 慢慢摳圖效率可提升瞭太多瞭,而且還能讓不會 PS 的群體也能輕松學會摳人像圖。
吹瞭這麼多,讓我們正式開始開始敲代碼吧!
正文
我知道看到這篇文章標題,有的吃瓜群眾會八卦:哎呀,那個朋友結婚啊……
寫這篇文章的靈感主要是來源於上個月底結婚的那兩個人:
帶著這一份感動,小編之制作瞭「空中的和平鴿」的背景,祝二人百年好合~
那是怎麼達到這個一鍵摳圖換背景的呢?
1)附主程序
# 日常縮放 rows, cols, channels = img_back.shape img_back = cv2.resize(img_back, None, fx=0.7, fy=0.7) cv2.imshow('img_back', img_back) rows, cols, channels = img.shape img = cv2.resize(img, None, fx=0.4, fy=0.4) cv2.imshow('img', img) rows, cols, channels = img.shape # rows,cols最後一定要是前景圖片的,後面遍歷圖片需要用到 # 轉換hsv hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 獲取mask lower_blue = np.array([78, 43, 46]) upper_blue = np.array([110, 255, 255]) mask = cv2.inRange(hsv, lower_blue, upper_blue) cv2.imshow('Mask', mask) # 腐蝕膨脹 erode = cv2.erode(mask, None, iterations=1) cv2.imshow('erode', erode) dilate = cv2.dilate(erode, None, iterations=1) cv2.imshow('dilate', dilate) # 遍歷替換 center = [50, 50] # 在新背景圖片中的位置 for i in range(rows): for j in range(cols): if dilate[i, j] == 0: # 0代表黑色的點 img_back[center[0] + i, center[1] + j] = img[i, j] # 此處替換顏色,為BGR通道 cv2.imshow('res', img_back) cv2.waitKey(0) cv2.destroyAllWindows()
好啦!上面的摳圖換背景就是這個代碼的效果滴!
2)展示其他
那我們來看看我最近一直在用的另外一個摳圖app吧!這個摳圖效果其實比我代碼更好 哈哈哈哈~
2.1 我不說那張是原圖——你能猜出來嘛?
2.2 從漫畫走進現實
2.3 想用什麼背景換什麼背景
總結
好啦!整個摳圖換背景的效果,你隻需要掌握使用opencv,加上小小的【創意】,最後就能做出效果不錯,又有實用的不同背景圖來,趕快自己也來試試吧~
到此這篇關於OpenCV實戰之AI照片背景替換的文章就介紹到這瞭,更多相關OpenCV照片背景替換內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 20行代碼教你用python給證件照換底色的方法示例
- 使用python和opencv的mask實現摳圖疊加
- python-opencv中的cv2.inRange函數用法說明
- Python+OpenCV實現基於顏色的目標識別
- Python+OpenCV實現圖片及視頻中選定區域顏色識別