python人物视频背景替换实现虚拟空间穿梭
- 更新时间:2022-09-07 08:46:19
- 编辑:高梦竹
引言
近期网上这位卖蜂蜜的小伙鬼畜挺火的,大家质疑背景造假,这里我就带着大家实现“背景造假”(PS:原视频小伙是在真实场景拍摄的)
准备工作
在实现该功能之前,我们需要准备好python==3.7 然后执行:
pip install mediapipe
方案一: PC端可以选择外界摄像头或者连接网络摄像头,最好挑选一个纯属的背景板作为视频画面背景(这样有利于任务分割);
方案二: 网上下载有人物活动的视频,然后用下载的视频替代连接摄像头。
到这里我们基础物件已经搭建好了,本实验代码选择方案二,对下载视频分析,其shape=(740,640,3)。接下来我将带领大家实现三个版本的背景替换
纯RGB背景替换
基础板:将人物提取出来,替换成设定好的纯色背景(可以通过RGB设定)。其基本流程如下:
1. 输入视频
2. 获取视频帧
3. 提取帧内人物图像
4. 设定背景RGB值
5. 创建同视频帧同shape的RGB图像
6. 结合背景图与人物图
7. 输出结合图
示例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()
原视频节选帧&替换背景帧:
自定义图像背景板替换
由于我们已知图像的shape,我们可以在网上挑选自己喜欢的背景图,然后调整背景图的shape,使其与视频图像保持一致。整体流程图下:
1. 下载选择喜欢的背景图像
2. 调整下载图像的shape=(740,604,3)
3. 读取视频
4. 获取视频帧
5. 获取视频帧内人物图像
6. 结合背景图和人物图像
7. 输出视频画面
修改图像大小并进行50%缩放后的背景图:
背景图结合人物图:
这里我的背景图选择的有些单调,也不是那么适合,望读者见谅! 代码部分修改:
bg_image = cv2.imread("BBB.jpg")
以上就是python实现人物视频背景替换的详细内容,更多关于python视频背景替换的资料请关注码农之家其它相关文章!
相关教程
-
python批量复制文件夹下所有文件大小
在本篇文章里小编给大家整理了关于python批量复制文件夹下所有文件大小的操作方法以及实例代码,需要的朋友们可以学习参考下。
发布时间:2019-06-23
-
介绍Python如何使用asyncio包处理并发
这篇文章主要为大家详细介绍了Python使用asyncio包处理并发的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2020-01-21
-
小结python单例的两种实现方法
本篇文章给大家带来的内容是关于python单例的两种实现方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
发布时间:2020-02-14
-
python爬取租房信息并地图上显示的代码
这篇文章主要介绍了python爬虫租房信息在地图上显示的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布时间:2020-01-20
-
Python3去除头尾指定字符的函数strip()、lstrip()、rstrip()用法详解
为网友们分享了关于Python3的教程,这篇文章主要介绍了Python3去除头尾指定字符的函数strip()、lstrip()、rstrip()用法详解,需要的朋友可以参考下
发布时间:2022-06-18
-
Python中使用while循环实现花式打印乘法表
今天小编就为大家分享一篇关于Python使用while循环花式打印乘法表,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2020-01-21
-
python实现txt文本批量创建文件夹方法
这篇文章主要为大家详细介绍了python根据txt文本批量创建文件夹,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2019-06-07
-
python字典根据值返回键的代码分析
迭代的过程中如果没有发生对字典的修改,那么.keys() and .values 这两个函数返回的 dict-view对象总是保持对应关系。字典中的value不保证唯一性,不过字典中key的值是唯一的,因此可以根据值返回
发布时间:2020-05-21