动态人物抠图换背景 MediaPipe

news2024/10/5 19:05:33

pip下载 MediaPipe

pip install mediapipe -i 

手部特征点模型包包含一个手掌检测模型和一个手部特征点检测模型。手掌检测模型在输入图片中定位手部,手部特征点检测模型可识别手掌检测模型定义的被剪裁手掌图片上的特定手部特征点。
由于运行手掌检测模型非常耗时,因此在视频或直播跑步模式下,手部特征点会在一帧中使用手部特征点模型定义的边界框,以便为后续帧定位手部区域。仅当手部特征点模型不再识别出手部的存在或未能跟踪画面中的手部时,手部特征点才会重新触发手掌检测模型。这样可以减少手动标志器触发手掌检测模型的次数。

姿态检测

import cv2
import mediapipe as mp
# 获取pose模块
mp_pose = mp.solutions.pose
# 绘图工具模块
mp_draw = mp.solutions.drawing_utils
a=mp_draw.DrawingSpec((255,0,0),-1,2)#绘制节点圆圈的大小颜色
b=mp_draw.DrawingSpec((0,0,255),4)#绘制线条的粗细和颜色
# 获取Pose对象
pose = mp_pose.Pose(static_image_mode=True)

cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.resizeWindow("img", (800, 600))
img = cv2.imread("img.png")

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 使用Pose对象处理图像,得到姿态的关键点
results = pose.process(img_rgb)
pose_landmarks = results.pose_landmarks
if pose_landmarks:
    mp_draw.draw_landmarks(img, pose_landmarks, mp_pose.POSE_CONNECTIONS,a,b)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 效果图:

mp_draw.DrawingSpec() 用于定义绘图的样式,包括颜色、线条粗细、圆形半径等。以下是 mp_draw.DrawingSpec 的一些常用参数:

  • color:指定绘图的颜色,可以是一个整数表示的 BGR 颜色值,也可以是一个包含三个元素的列表或元组表示的 RGB 颜色值。

  • thickness:指定绘图的线条粗细,默认为 1。

  • circle_radius:指定绘图中圆形的半径,默认为 1。

mp_pose.Pose()的参数用于配置人体姿态估计的行为,以下是一些常用参数:

  • static_image_mode:表示输入的是静态图像还是连续帧视频。如果设置为True,则表示输入为静态图像;如果设置为False,则表示输入为连续帧视频。

  • model_complexity:表示人体姿态估计模型的复杂度。可以选择0、1或2,其中0表示速度最快但精度最低,1表示速度和精度平衡,2表示速度最慢但精度最高。

  • smooth_landmarks:表示是否平滑关键点。如果设置为True,则会对关键点进行平滑处理,使姿态估计更加流畅。

  • enable_segmentation:表示是否对人体进行抠图。如果设置为True,则会在输出中包含人体的分割掩码。

  • min_detection_confidence:表示检测置信度的阈值。只有当检测到的人体姿态的置信度高于该阈值时,才会被认为是有效的姿态估计。

  • min_tracking_confidence:表示跟踪置信度的阈值。在连续帧视频中,只有当跟踪到的人体姿态的置信度高于该阈值时,才会继续使用该姿态估计。

mp_draw.draw_landmarks()函数用于在图像上绘制手部关键点和连接,其参数如下:

  • image:要绘制关键点和连接的图像。

  • landmark_list:检测到的手部关键点坐标。

  • connections:要绘制的连接线,需要指定哪些关键点之间进行连接。

  • landmark_drawing_spec:关键点的绘制样式,包括颜色、粗细等。

  • connection_drawing_spec:连接线的绘制样式,包括颜色、粗细等。

姿态检测(3D)

import cv2
import mediapipe as mp
# 获取pose模块
mp_pose = mp.solutions.pose
# 绘图工具模块
mp_draw = mp.solutions.drawing_utils
# 获取Pose对象
pose = mp_pose.Pose(static_image_mode=True)

img = cv2.imread("yj.jpg")

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 使用Pose对象处理图像,得到姿态的关键点
results = pose.process(img_rgb)
pose_landmarks = results.pose_world_landmarks
#pose_landmarks是一个包含多个关键点的数组或数据结构,每个关键点可能包含坐标信息(如 x、y、z 坐标)以及其他相关属性。这些关键点可以表示人体的关节、部位或其他特征点。
if pose_landmarks:
    mp_draw.plot_landmarks(pose_landmarks, mp_pose.POSE_CONNECTIONS)

cv2.destroyAllWindows()

效果图:

mp_draw.plot_landmarks()函数用于在图像或视频帧上绘制姿态估计的关键点和连接。以下是该函数的参数说明:

  • landmarks:要绘制的关键点列表。

  • connections:要绘制的连接列表,指定哪些关键点之间进行连接。

  • landmark_drawing_spec:关键点的绘制样式,包括颜色、大小等。

  • connection_drawing_spec:连接线的绘制样式,包括颜色、粗细等。

 人体抠图换背景

import cv2
import mediapipe as mp
import numpy as np

# 获取pose模块
mp_pose=mp.solutions.pose
# 绘图工具模块
mp_draw=mp.solutions.drawing_utils
# 获取Pose对象
pose=mp_pose.Pose(static_image_mode=True, enable_segmentation=True)

# 获取背景,原图
bg=cv2.imread('bg.png')
im=cv2.imread('img.png')
cv2.imshow('bg',bg)
cv2.imshow('im',im)
# 将背景的size设置和原图size一致
w,h,c=im.shape
bg=cv2.resize(bg,(h,w))

# 使用Pose对象处理图像,得到姿态的关键点
im_rgb=cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
result=pose.process(im_rgb)
# cv2.imshow('result',result)

# segmentation_mask中的数据值是0.0-1.0,值越大,表示越接近是人
mask=result.segmentation_mask
cv2.imshow('mask',mask)

#
# 将单通道的mask变成三通道
mask=np.stack((mask,mask,mask),-1)
# 大于0.5的才是人
mask=mask>0.5
img1=np.where(mask,im,bg)
cv2.imshow('im1',img1)

cv2.waitKey(0)
cv2.destroyAllWindows()

效果嘎嘎棒 

pose.process(img_rgb)返回值的属性

  • pose_landmarks:这是一个包含人体姿态关键点的数组,每个关键点都有一个对应的坐标。这些关键点可以用于表示人体的关节位置,例如头部、肩膀、手臂、腿部等。通过分析这些关键点的位置和运动,可以实现人体姿态的识别、动作捕捉等功能。

  • pose_world_landmarks:与pose_landmarks类似,pose_world_landmarks也是一个关键点数组。不同的是,pose_world_landmarks中的关键点坐标是在真实世界坐标系中的位置,而不是图像坐标系中的位置。这意味着pose_world_landmarks可以提供更准确的人体姿态信息,适用于需要与真实世界进行交互的应用场景。

  • segmentation_masksegmentation_mask是姿态跟踪结果中的一个数组,它的大小与跟踪的图像相同。每个像素的值在0.0到1.0之间,其中较暗的值表示背景,较亮的值表示被跟踪的身体。通过分析segmentation_mask,可以将人体从背景中分离出来,实现人体的分割和提取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1876392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[图解]建模相关的基础知识-19

1 00:00:00,640 --> 00:00:04,900 前面讲了关系的这些范式 2 00:00:06,370 --> 00:00:11,570 对于我们建模思路来说,有什么样的作用 3 00:00:12,660 --> 00:00:15,230 我们建模的话,可以有两个思路 4 00:00:16,790 --> 00:00:20,600 一个…

【QT】按钮类控件 显示类控件

目录 按钮类控件 Push Button 设置按钮图标 按钮设置快捷键 设置鼠标点击按钮重复触发 Radio Button 单选框分组 Check Box 显示类控件 Label 常用属性 设置文本格式 给Label设置图片 Label标签设置边框 设置文本对齐方式 设置文本自动换行 设置文本缩进 设置…

AI与音乐的结合

前言 毫无疑问,AI的发展已经在音乐领域带来了诸多变化和影响.但人类创作仍然具有不可替代的重要性。人类的灵感、创造力以及对音乐的深刻理解和情感表达是音乐产业的核心动力来源。AI 更倾向于被视为一种辅助工具,与人类创作者相互协作和融合,共同推动音…

Nuxt3 的生命周期和钩子函数(五)

title: Nuxt3 的生命周期和钩子函数(五) date: 2024/6/29 updated: 2024/6/29 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt3中的六个核心生命周期钩子及其用法,包括build:done、build:manifest、builder:generateApp、…

解锁亚马逊、Temu、速卖通成功密码:重视评论,做好测评自养号

在亚马逊平台上,产品评论至关重要,因其能帮助其他买家做出购买决策。然而,亚马逊上的买家留评率却很低。有趣的是,存在一些买家,他们并未实际购买产品,却能发表评论。这究竟是怎么回事呢?接下来…

探索音频创作的无限可能——Studio One 5 软件深度解析

Studio One 5 是一款功能强大且备受赞誉的音频制作软件,无论是专业音乐制作人还是业余爱好者,都能在其中找到满足自己需求的强大功能。 对于 Mac 和 Windows 用户来说,Studio One 5 提供了一个直观且友好的操作界面。其简洁明了的布局让用户…

App Inventor 2 列表排序,函数式编程轻松实现高级排序算法

本文主要介绍 列表 的高级用法,即函数式编程,可以按照指定的逻辑进行列表的排序,而无需我们自己写代码实现排序功能。 指定的逻辑也包括很复杂的逻辑,也就是说如果你的排序逻辑很复杂,函数式编程就是最好的使用场景。…

FreeSWITCH 1.10.10 简单图形化界面22-JsSIP的demo测试并记录坑

FreeSWITCH 1.10.10 简单图形化界面22-JsSIP的demo测试 00 FreeSWITCH GUI界面预览01、安装FreeSWITCH GUI先看使用手册02. 使用手册在这里0、设置FreeSWITCH账号1、jssip的demo网站2、设置jssip账号并登录3、整理坑3.1 掉线问题3.11 解决3.2 呼叫问题13.21 解决13.3 呼叫问题2…

基于Spring Boot与Vue的智能房产匹配平台+文档

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐:最热的500个选题…

苏东坡传-读书笔记四

长江三峡,无人不知其风光壮丽,但对旅客而言,则是险象环生。此段江流全长二百二十余里,急流旋涡在悬崖峭壁之间滚转出入,水下暗石隐伏,无由得见,船夫要极其敏捷熟练,才可通行。三峡之…

Linux平台下RTSP|RTMP播放器如何跟python交互投递RGB数据供视觉算法分析

技术背景 我们在对接Linux平台RTSP播放模块的时候,遇到这样的技术需求,开发者需要把Linux RTSP播放器拉取的数据,除了实时播放外,还要投递给python,用于视觉算法分析。 技术实现 Linux平台RTSP、RTMP直接播放不再赘…

夏季如何科学防暑?约克VRF中央空调为您奉上清凉降暑秘籍

热热热,一到夏天“滚滚热浪”来袭,仿佛像个炙热的“烤炉”一般,燥热难耐、流汗不停,长时间呆在高温环境下还容易引发中暑、热射病等问题,威胁身体健康。      有人可能会说,高温天气,我躲在…

Ubuntu系统,实现FastDDS的源码编译

目录 一、Ubuntu系统介绍二、FastDDS是什么三、FastDDS的源码编译四、FastDDS的简单测试 一、Ubuntu系统介绍 Ubuntu是一个基于Linux的开源操作系统,由Canonical公司开发和维护。它以其易用性、稳定性和安全性而受到广泛赞誉。Ubuntu系统提供了一个图形化的桌面环境…

【MTK平台】连接蓝牙耳机播放音乐>插入有线耳机>再拔掉有线耳机,声音会从设备中播放一秒,再切到蓝牙耳机

一般这类情况优先考虑Audio的问题 修改如下这个BTA2DP_MUTE_CHECK_DELAY_MS 参数值既可,比如增加delay 把BTA2DP_MUTE_CHECK_DELAY_MS * 4改成 BTA2DP_MUTE_CHECK_DELAY_MS *8 frameworks/base/services/core/java/com/android/server/audio/AudioDeviceBroker.j…

微信小程序开发_准备工作

1 注册小程序 注册地址 https://mp.weixin.qq.com/wxopen/waregister?actionstep1&sourcempregister&token&langzh_CN 2 完善小程序信息 进入微信公众平台https://mp.weixin.qq.com/,登录账号 登录后,在首页完善小程序信息和小程序类目 完成后在左侧找到开发…

【ACM出版-EI稳检索】第三届金融创新、金融科技与信息技术国际学术会议(FFIT 2024,7月26-28)

第三届金融创新、科技与信息技术国际学术会议(FFIT 2024)将于2024年07月26-28日于重庆举行。 FFIT2024 将围绕“金融创新”、"金融科技”与“信息技术”等相关最新研究领域,为来自国内外高等院校、科学研究所、企事业单位的专家、教授、…

SerDes介绍以及原语使用介绍(3)ISERDESE2原语介绍

文章目录 前言一、ISERDESE21.1、ISERDESE2端口信号1.1、ISERDESE2参数 二、BITSLIP-位滑动2.1、BITSLIP作用2.2、BITSLIP使用2.3、BITSLIP示例 前言 上文对OSERDESE进行了详细介绍并且进行了仿真分析,本文开始对ISERDES进行介绍, 一、ISERDESE2 不难…

Python生成和识别二维码教程

引言 二维码(QR Code)在日常生活中非常常见,广泛应用于支付、登录验证、信息分享等场景。本文将介绍如何使用Python生成和识别二维码,适合初学者快速上手。我们将使用qrcode和pyzbar库来实现这一功能。 环境准备 在开始之前&am…

Python+Pytest+Allure+Yaml+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人:CesareCheung 更新时间:2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求:Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…

C++并发之环形队列(ring,queue)

目录 1 概述2 实现3 测试4 运行 1 概述 最近研究了C11的并发编程的线程/互斥/锁/条件变量,利用互斥/锁/条件变量实现一个支持多线程并发的环形队列,队列大小通过模板参数传递。 环形队列是一个模板类,有两个模块参数,参数1是元素…