【自己动手Python编程替换视频会议背景】

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【自己动手Python编程替换视频会议背景】

1. 内容:

(1) 基于摄像头或视频进行视频分解与合成;

(2) 图片融合,背景镂空;

(3) 交互技术,传统键盘\鼠标人机交互;

2. 设计流程:

本程序采用Python语言进行编程,首先导入相关的依赖库open CV, cvzone, mediapipe, protobuf==3.19.0。然后捕捉本地的摄像头命名为cap,设置图像的大小为640×480,设置fps更新频率为30,选择背景图片的路径 扫描路径下的图片,并展平为矩阵序列,默认的背景图片索引为第一张零。开始进行死循环,读取摄像头数据,然后去除摄像头里面的背景更改为目标图片背景,将原视频和听完后的视频进行合并,并在左上角打印对应的帧率,随后保存视频帧并且显示视频,通过按键来触发视频背景的一个切换动画效果,按a键逆序切换背景,按d键顺序切换背景,按q退出。最后是向释放摄像头资源,关闭所有窗口,结束程序。设计流程图如图1

1.png

3. 程序设计:

Python环境采用3.9,主程序是main.py, 背景源文件为"Images",运行后保存为’output.avi’,程序如下:

Images包含6张640*480 JPG图片,均来自网络

2.jpeg

3.jpeg

4.jpeg

5.jpeg

6.jpeg

7.jpeg

代码如下:

#参考1:https://blog.csdn.net/weixin_44278406/article/details/105248699
#参考2:https://www.bilibili.com/video/BV1iX4y1A7si?spm_id_from=333.337.search-card.all.click
#导入相关库opencv-python,cvzone,mediapipe,protobuf==3.19.0
#pip uninstall protobuf 降低版本兼容
#pip install protobuf==3.19.0
import cv2
import cvzone
from cvzone.SelfiSegmentationModule import SelfiSegmentation
import os
#捕捉本地摄像头
cap = cv2.VideoCapture(0)
#图像大小为640*480
cap.set(3, 640)
cap.set(4, 480)
#设置FPS更新帧率
cap.set(cv2.CAP_PROP_FPS, 30)
segmentor = SelfiSegmentation()
fpsReader = cvzone.FPS()
#定义保存路径和文件名
saveVideoPath = 'output.avi'
# 定义编解码器并创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(saveVideoPath, fourcc, 30.0, (1280, 480))
#背景图片路径选择(图片大小
ListImg = os.listdir("Images")
#打印路径下的图片名称
print(ListImg)
imgList = []
#读取所有背景图片并展平为矩阵
for imgPath in ListImg:
    img = cv2.imread(f'Images/{imgPath}')
    imgList.append(img)
#打印图片矩阵个数
print(len(imgList))
#默认索引第一张图片
indexImg = 0
while True:
    #读取摄像头
    success, img = cap.read()
    if success == True:
        #去背景为目标背景
        imgOut = segmentor.removeBG(img, imgList[indexImg], threshold=0.80)
        #排列原视频和替换背景的视频合并
        imgStacked = cvzone.stackImages([img, imgOut], 2, 1)
        #左上角打印对应帧率
        _, imgStacked = fpsReader.update(imgStacked, color=(0, 255, 0))
        #打印背景索引值
        print(indexImg)
        # 写入视频帧
        out.write(imgStacked)
        #显示合并视频
        cv2.imshow("Image", imgStacked)
        key = cv2.waitKey(1)
        #按“a"逆序切换背景,按“d"顺序切换背景,按“q"退出
        if key == ord('a'):
            if indexImg > 0:
                indexImg -= 1
            else:
                indexImg = len(imgList)-1
        elif key == ord('d'):
            if indexImg < len(imgList)-1:
                indexImg += 1
            else:
                indexImg = 0
        elif key == ord('q'):
            break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

按a键逆序切换背景,按d键顺序切换背景,按q退出。按演示过程效果背景1如图2,背景2如图3。

1.png

2.png

目录
相关文章
|
10月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1658 102
|
10月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
505 104
|
10月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
397 103
|
10月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
427 82
|
编解码 数据安全/隐私保护 Python
抖音批量发布视频工具,自动上传视频作品笔记,python发布软件
这个抖音批量发布工具包含三个主要模块:主上传程序、配置文件和视频预处理工具。主程序
|
9月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
528 3
|
9月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
760 3
|
9月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
580 3
|
9月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
794 0
|
9月前
|
数据采集 自然语言处理 数据可视化
Python爬取B站视频评论区情感分析:从数据采集到价值挖掘
B站作为年轻人聚集地,评论蕴含丰富情感与趋势。本文详解如何用Python爬取评论,结合SnowNLP与jieba进行中文情感分析,并通过可视化挖掘用户情绪、消费意愿与内容反馈,助力精准运营与决策。
1231 0

推荐镜像

更多