news 2026/6/10 4:59:56

【OpenCV项目实战】背景替换:动态背景移除与替换(cvzone+MediaPipe)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【OpenCV项目实战】背景替换:动态背景移除与替换(cvzone+MediaPipe)

文章目录

  • 一、项目思路
  • 二、环境布置
    • 2.1、cvzone安装
    • 2.2、MediaPipe安装
    • 2.3、常见问题
    • 2.4、注意事项
  • 三、算法详解
    • 3.1、segmentor.removeBG():去除背景(抠图)
    • 3.2、cvzone.stackImages():堆叠图像
    • 3.3、fpsReader.update():更新帧图像
    • 3.4、os.listdir():返回指定的文件夹包含的文件或文件夹的名字的列表。
  • 四、实战:基于计算机视觉库(cvzone)的背景替换

一、项目思路

  1. 设置框架参数
  2. 指定存放图像的文件夹地址
  3. 遍历图像并缩放至与框架相同尺寸
  4. 移除摄像头拍摄的背景
  5. 与指定图像进行叠加
  6. 实时更新

二、环境布置

2.1、cvzone安装

  • opencv是一个开源计算机视觉库。
  • cvzone是一个开源计算机视觉库,提供多种类型项目。如:人脸检测、手部跟踪、姿势估计等,以及图像处理和其他 AI 功能。它的核心是使用 OpenCV 和 MediaPipe 库。

(1)在线下载
DOS命令行窗口中输入:pip install cvzone
(2)离线下载(安装包.gz)
PyPi官网下载地址:cvzone:计算机视觉库。
安装过程如下:DOS命令行窗口cd到安装包的setup.py路径,然后输入python setup.py install

更多项目可参考官网:
cvzone官网(github)

2.2、MediaPipe安装

MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架,用于构建多模式(视频,音频和传感器)应用的机器学习管道。可在移动设备、工作站和服务器上跨平台运行,并支持移动 GPU 加速。

(1)在线下载
DOS命令行窗口中输入:

  • pip install opencv-python
  • pip install mediapipe

(2)离线下载(.whl)
PyPi官网下载地址:MediaPipe:为移动、边缘、云和web构建世界级ML解决方案和应用程序的最简单方法。

注意:MediaPipe版本必须与Python的版本对应。

更多项目可参考官网:
MediaPipe官网(github)
MediaPipe官网(gitee-镜像)

2.3、常见问题

关于python的mediapipe库踩过的坑

2.4、注意事项

如何减小锯齿和虚影:
(1)视频中布置的背景尽量简约(如:白墙等),过多的东西容易变成干扰项。
(2)手指间的虚影比较大,尽量减少相关动作。

三、算法详解

3.1、segmentor.removeBG():去除背景(抠图)

3.2、cvzone.stackImages():堆叠图像

3.3、fpsReader.update():更新帧图像

3.4、os.listdir():返回指定的文件夹包含的文件或文件夹的名字的列表。

os.listdir():返回指定的文件夹包含的文件或文件夹的名字的列表。列表以字母排序。不包括 . 和 … ,即使它在文件夹中。只支持在 Unix, Windows 下使用。

函数说明:list=os.listdir(path)输入参数 path--需要列出的目录路径 输入参数: 返回指定路径下的文件和文件夹列表。################################################folder_path=r"C:\Users\my\Desktop\Images"# 存放图像的文件夹路径(不能有中文)list_img=os.listdir(folder_path)# os.listdir(): 返回指定文件夹下的文件名(列表结构)print(list_img)# 打印文件夹中的图像名img_list=[]# 存放自定义图像的列表forimg_pathinlist_img:# 遍历文件夹image_path=folder_path+'/'+img_path# 读取图像路径img=cv2.imread(image_path)# 读取图像img_list.append(img)# 添加列表元素print(len(img_list))# 打印列表长度

四、实战:基于计算机视觉库(cvzone)的背景替换

importcv2importcvzoneimportosfromcvzone.SelfiSegmentationModuleimportSelfiSegmentation# 摄像头的帧大小是640x480,所以替换的背景图像大小应该与帧大小相同。# 设置参数cap=cv2.VideoCapture(0)# 获取图像设备(0/1)cap.set(3,640)# 调整输出框架的长cap.set(4,480)# 调整输出框架的宽cap.set(cv2.CAP_PROP_FPS,60)# 调整输出框架的帧速率segmentor=SelfiSegmentation()# 实例化分割模型fpsReader=cvzone.FPS()# 显示帧每秒(fps)的输出帧folder_path=r"C:\Users\my\Desktop\Images"# 存放背景图像的文件夹路径(不能有中文)(可存放任意张图像)list_img=os.listdir(folder_path)# os.listdir(): 返回指定文件夹下的文件名(列表结构)print(list_img)# 打印文件夹中的图像名img_list=[]# 存放自定义图像的列表forimg_pathinlist_img:# 遍历文件夹image_path=folder_path+'/'+img_path# 读取图像路径img=cv2.imread(image_path)# 读取图像print(img.size)# 打印图像尺寸img=cv2.resize(img,(640,480))# 图像缩放到指定尺寸img_list.append(img)# 添加列表元素print(len(img_list))# 打印列表长度img_index=0# 初始化背景图片(列表中索引=0)while1:reg,img=cap.read()# 读取帧图像img_out=segmentor.removeBG(img,img_list[img_index],threshold=0.5)# 移除背景img_stacked=cvzone.stackImages([img,img_out],2,1)# 图像叠加fps,img_stacked=fpsReader.update(img_stacked,color=(0,0,255))# 实时更新(人物是动态的)cv2.imshow("Image_stacked",img_stacked)# 图形化显示(标题名 + 图像)key=cv2.waitKey(1)# 使用 waitKey 可以控制视频的播放速度。数值越小,播放速度越快。ifkey&0xFF==27:# 按Esc退出breakelifkey==ord('q'):# 背景切换ifimg_index>0:img_index-=1# Q键:在自定义的图片中,正向选择图片elifkey==ord('w'):ifimg_index<len(img_list)-1:img_index+=1# W键:在自定义的图片中,逆向选择图片

Opencv项目实战:你这背景太假啦!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 4:54:09

基于深度学习的人类行为识别算法研究

一、前言 行为识别技术能够使机器通过分析视频数据来理解和解释人类的活动&#xff0c;这是人工智能领域中一个非常活跃的研究主题。尽管行为识别技术取得了一定的进展&#xff0c;但仍然面临着诸多挑战&#xff0c;包括复杂背景、目标外观变化以及行为模式的多样性。视频可以被…

作者头像 李华
网站建设 2026/6/10 4:52:06

Valkey分布式集群3分钟极速部署:告别手动配置的运维噩梦

Valkey分布式集群3分钟极速部署&#xff1a;告别手动配置的运维噩梦 【免费下载链接】placeholderkv A flexible distributed key-value database that is optimized for caching and other realtime workloads. 项目地址: https://gitcode.com/GitHub_Trending/pl/placehold…

作者头像 李华
网站建设 2026/6/10 4:45:17

Claudian插件更新策略:保持功能最新的完整指南

Claudian插件更新策略&#xff1a;保持功能最新的完整指南 【免费下载链接】claudian An Obsidian plugin that embeds Claude Code/Codex as an AI collaborator in your vault 项目地址: https://gitcode.com/GitHub_Trending/cl/claudian Claudian是一款为Obsidian打…

作者头像 李华
网站建设 2026/6/10 4:45:14

LLM应用中的向量化技术:从Embedding到相似度搜索的完整实现

LLM应用中的向量化技术&#xff1a;从Embedding到相似度搜索的完整实现 【免费下载链接】large-language-models Notebooks for Large Language Models (LLMs) Specialization 项目地址: https://gitcode.com/gh_mirrors/la/large-language-models 在当今的大语言模型&a…

作者头像 李华