python人物視頻背景替換實(shí)現(xiàn)虛擬空間穿梭
引言
近期網(wǎng)上這位賣蜂蜜的小伙鬼畜挺火的,大家質(zhì)疑背景造假,這里我就帶著大家實(shí)現(xiàn)“背景造假”(PS:原視頻小伙是在真實(shí)場景拍攝的)
準(zhǔn)備工作
在實(shí)現(xiàn)該功能之前,我們需要準(zhǔn)備好python==3.7 然后執(zhí)行:
pip install mediapipe
方案一: PC端可以選擇外界攝像頭或者連接網(wǎng)絡(luò)攝像頭,最好挑選一個(gè)純屬的背景板作為視頻畫面背景(這樣有利于任務(wù)分割);
方案二: 網(wǎng)上下載有人物活動(dòng)的視頻,然后用下載的視頻替代連接攝像頭。
到這里我們基礎(chǔ)物件已經(jīng)搭建好了,本實(shí)驗(yàn)代碼選擇方案二,對(duì)下載視頻分析,其shape=(740,640,3)。接下來我將帶領(lǐng)大家實(shí)現(xiàn)三個(gè)版本的背景替換
純RGB背景替換
基礎(chǔ)板:將人物提取出來,替換成設(shè)定好的純色背景(可以通過RGB設(shè)定)。其基本流程如下:
1. 輸入視頻
2. 獲取視頻幀
3. 提取幀內(nèi)人物圖像
4. 設(shè)定背景RGB值
5. 創(chuàng)建同視頻幀同shape的RGB圖像
6. 結(jié)合背景圖與人物圖
7. 輸出結(jié)合圖
示例demo:
import cv2
import mediapipe as mp
import numpy as np
mp_drawing = mp.solutions.drawing_utils
mp_selfie_segmentation = mp.solutions.selfie_segmentation
BG_COLOR = (0, 0, 225) # red
cap = cv2.VideoCapture('111.mp4')
with mp_selfie_segmentation.SelfieSegmentation(
model_selection=0) as selfie_segmentation:
bg_image = None
while cap.isOpened():
success, image = cap.read()
if not success:
break
image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
image.flags.writeable = False
results = selfie_segmentation.process(image)
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
condition = np.stack(
(results.segmentation_mask,) * 3, axis=-1) > 0.8
if bg_image is None:
bg_image = np.zeros(image.shape, dtype=np.uint8)
bg_image[:] = BG_COLOR
print(bg_image.shape)
output_image = np.where(condition, image, bg_image)
cv2.imshow('MediaPipe Selfie Segmentation', output_image)
if cv2.waitKey(5) & 0xFF == 27:
break
cap.release()
原視頻節(jié)選幀&替換背景幀:


自定義圖像背景板替換
由于我們已知圖像的shape,我們可以在網(wǎng)上挑選自己喜歡的背景圖,然后調(diào)整背景圖的shape,使其與視頻圖像保持一致。整體流程圖下:
1. 下載選擇喜歡的背景圖像
2. 調(diào)整下載圖像的shape=(740,604,3)
3. 讀取視頻
4. 獲取視頻幀
5. 獲取視頻幀內(nèi)人物圖像
6. 結(jié)合背景圖和人物圖像
7. 輸出視頻畫面
修改圖像大小并進(jìn)行50%縮放后的背景圖:

背景圖結(jié)合人物圖:

這里我的背景圖選擇的有些單調(diào),也不是那么適合,望讀者見諒! 代碼部分修改:
bg_image = cv2.imread("BBB.jpg")以上就是python實(shí)現(xiàn)人物視頻背景替換的詳細(xì)內(nèi)容,更多關(guān)于python視頻背景替換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python構(gòu)建一個(gè)簡單的數(shù)據(jù)處理流水線
數(shù)據(jù)處理流水線是數(shù)據(jù)分析和工程中非常常見的概念,通過流水線的設(shè)計(jì),可以將數(shù)據(jù)的采集、處理、存儲(chǔ)等步驟連接起來,實(shí)現(xiàn)自動(dòng)化的數(shù)據(jù)流,使用Python構(gòu)建一個(gè)簡單的數(shù)據(jù)處理流水線(Data?Pipeline),一步步構(gòu)建流程,并附上流程圖來幫助你更好地理解數(shù)據(jù)流的工作方式2024-12-12
python tkinter實(shí)現(xiàn)連連看游戲
這篇文章主要介紹了python tkinter實(shí)現(xiàn)連連看游戲的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
Python解析Excle文件中的數(shù)據(jù)方法
今天小編就為大家分享一篇Python解析Excle文件中的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
解決Python plt.savefig 保存圖片時(shí)一片空白的問題
今天小編就為大家分享一篇解決Python plt.savefig 保存圖片時(shí)一片空白的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
centos 安裝python3.6環(huán)境并配置虛擬環(huán)境的詳細(xì)教程
這篇文章主要介紹了centos-安裝python3.6環(huán)境并配置虛擬環(huán)境的詳細(xì)教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02
python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣)
今天小編就為大家分享一篇python實(shí)現(xiàn)回旋矩陣方式(旋轉(zhuǎn)矩陣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Pycharm 2020.1 版配置優(yōu)化的詳細(xì)教程
這篇文章主要介紹了更新Pycharm 2020.1 版配置優(yōu)化的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08

