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!

推薦閱讀: