python人物视频背景替换实现虚拟空间穿梭

 更新时间:2022年07月29日 15:45:09   作者:小小杨树  
这篇文章主要为大家介绍了python实现人物视频背景替换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

近期网上这位卖蜂蜜的小伙鬼畜挺火的,大家质疑背景造假,这里我就带着大家实现“背景造假”(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视频背景替换的资料请关注脚本之家其它相关文章!

相关文章

  • pytorch查看模型weight与grad方式

    pytorch查看模型weight与grad方式

    这篇文章主要介绍了pytorch查看模型weight与grad方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python字符遍历的艺术

    Python字符遍历的艺术

    通常我们要遍历一个字符串中的每个字符,都要先获取字符串的长度,然后用一个For循环把每个字符取出,进行处理。但是,又是我们的Python,为我们提供了很多便捷的方式去遍历一个字符串中的字符。
    2008-09-09
  • Python中time.sleep(0.001)是否真的只等待1毫秒

    Python中time.sleep(0.001)是否真的只等待1毫秒

    这篇文章主要介绍了Python中time.sleep(0.001)是否真的只等待1毫秒,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 如何利用Python快速绘制海报级别地图详解

    如何利用Python快速绘制海报级别地图详解

    Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,最常见的便是绘制地图,这篇文章主要给大家介绍了关于如何利用Python快速绘制海报级别地图的相关资料,需要的朋友可以参考下
    2021-09-09
  • 如何用GAN训练自己的数据生成新的图片

    如何用GAN训练自己的数据生成新的图片

    这篇文章主要介绍了如何用GAN训练自己的数据生成新的图片问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Python排序算法之插入排序及其优化方案详解

    Python排序算法之插入排序及其优化方案详解

    今天给大家带来的文章是关于Python的相关知识,文章围绕着Python插入排序及其优化方案展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Django实现分页功能

    Django实现分页功能

    今天给大家分享的是如何使用Django实现简单分页功能的方法,主要依托于Django提供的一个新的类Paginator来实现的
    2018-07-07
  • Python实现执行Shell命令并获取输出

    Python实现执行Shell命令并获取输出

    这篇文章主要介绍了如何借助 os.system() 从 Python 脚本执行 cmd 命令,以及如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令,感兴趣的小伙伴可以了解下
    2023-10-10
  • Django1.11自带分页器paginator的使用方法

    Django1.11自带分页器paginator的使用方法

    这篇文章主要为大家详细介绍了Django1.11自带分页器Django的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 深入了解python基于tkinter写的画图项目

    深入了解python基于tkinter写的画图项目

    这篇文章主要为大家介绍了python基于tkinter写的画图项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12

最新评论