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

自己动手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 设计流程图

3. 程序设计:

Python环境采用3.9,主程序是main.py, 背景源文件为"Images",运行后保存为’output.avi’,程序如下:
Images包含6张640*480 JPG图片,均来自网络
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

代码如下:

#参考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。
图2 背景1
图3 背景2

参考文献:
从摄像头中获取视频并保存
自己动手编程替换视频会议背景
资源下载:Python编程替换视频会议背景

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2345VOR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值