资源简介
Kinect 2.0 骨骼显示及画出骨骼结合opencv 显示。
代码片段和文件信息
#include “myKinect.h“
#include
/// Initializes the default Kinect sensor
HRESULT CBodyBasics::InitializeDefaultSensor()
{
//用于判断每次读取操作的成功与否
HRESULT hr;
//搜索kinect
hr = GetDefaultKinectSensor(&m_pKinectSensor);
if (FAILED(hr)){
return hr;
}
//找到kinect设备
if (m_pKinectSensor)
{
// Initialize the Kinect and get coordinate mapper and the body reader
IBodyframeSource* pBodyframeSource = NULL;//读取骨架
IDepthframeSource* pDepthframeSource = NULL;//读取深度信息
IBodyIndexframeSource* pBodyIndexframeSource = NULL;//读取背景二值图
//打开kinect
hr = m_pKinectSensor->Open();
//coordinatemapper
if (SUCCEEDED(hr))
{
hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper);
}
//bodyframe
if (SUCCEEDED(hr))
{
hr = m_pKinectSensor->get_BodyframeSource(&pBodyframeSource);
}
if (SUCCEEDED(hr))
{
hr = pBodyframeSource->OpenReader(&m_pBodyframeReader);
}
//depth frame
if (SUCCEEDED(hr)){
hr = m_pKinectSensor->get_DepthframeSource(&pDepthframeSource);
}
if (SUCCEEDED(hr)){
hr = pDepthframeSource->OpenReader(&m_pDepthframeReader);
}
//body index frame
if (SUCCEEDED(hr)){
hr = m_pKinectSensor->get_BodyIndexframeSource(&pBodyIndexframeSource);
}
if (SUCCEEDED(hr)){
hr = pBodyIndexframeSource->OpenReader(&m_pBodyIndexframeReader);
}
SafeRelease(pBodyframeSource);
SafeRelease(pDepthframeSource);
SafeRelease(pBodyIndexframeSource);
}
if (!m_pKinectSensor || FAILED(hr))
{
std::cout << “Kinect initialization failed!“ << std::endl;
return E_FAIL;
}
//skeletonImg用于画骨架、背景二值图的MAT
skeletonImg.create(cDepthHeight cDepthWidth CV_8UC3);
skeletonImg.setTo(0);
//depthImg用于画深度信息的MAT
depthImg.create(cDepthHeight cDepthWidth CV_8UC1);
depthImg.setTo(0);
return hr;
}
/// Main processing function
void CBodyBasics::Update()
{
//每次先清空skeletonImg
skeletonImg.setTo(0);
//如果丢失了kinect,则不继续操作
if (!m_pBodyframeReader)
{
return;
}
IBodyframe* pBodyframe = NULL;//骨架信息
IDepthframe* pDepthframe = NULL;//深度信息
IBodyIndexframe* pBodyIndexframe = NULL;//背景二值图
//记录每次操作的成功与否
HRESULT hr = S_OK;
//---------------------------------------获取背景二值图并显示---------------------------------
if (SUCCEEDED(hr)){
hr = m_pBodyIndexframeReader->AcquireLatestframe(&pBodyIndexframe);//获得背景二值图信息
}
if (SUCCEEDED(hr)){
BYTE *bodyIndexArray = new BYTE[cDepthHeight * cDepthWidth];//背景二值图是8为uchar,有人是黑色,没人是白色
pBodyIndexframe->CopyframeDataToArray(cDepthHeight * cDepthWidth bodyIndexArray);
//把背景二值图画到MAT里
uchar* skeletonData = (uchar*)skeletonImg.data;
for (int j = 0; j < cDepthHeight * cDepthWidth; ++j){
*skeletonData = bodyIndexArray[j]; ++skeletonData;
*skeletonData = bodyIndexArray[j]; ++skeletonData;
*skeletonData = bodyIndexArray[j]; ++skeletonData;
}
delete[] bodyIndexArray;
}
SafeRelease(pBodyIndexframe);//必须要释放,否则之后无法获得新的frame数据
//-----------------------获取深度数据并显示--------------------------
if (SUCCEEDED(hr)){
hr = m_pDepthframeReader->AcquireLat
- 上一篇:pic18系列单片机C语言程序例程
- 下一篇:基于C++的三帧差法
相关资源
- Kinectv2 __MFC
- kinect+opengl 生成并显示点云
- Kinectv2_深度图和骨骼图源码
- Kinect2.0+PCL实现点云显示
- Kinect v2 跌到检测函数
- 基于Camshift+Kalman的多目标跟踪
- Kinect程序开发帮助文档C++
- expat-2.0.1
- C语言斗地主程序
- 完整的实时深度图平滑代码像素滤波
- 小蔡时钟V2.0(MFC版) VS2008
- C++ 电影公布器2.0-------网络版MYSQL数据
- Microsoft Visual C++ 2013 Redistributable Pack
- 中国移动通信CMPP2.0短消息网关开发接
- 《GTK+2.0编程范例》pdf
- opencv2深度图滤波
- modbus从机1.0自动流控制收发modbus从机
- C++小镇系列5.2.0控制台游戏源码
- c语言 实现俄罗斯方块游戏 (tc2.0)
- 很好用的C语言编译器,结合TC2.0,3
- MFCResourceID v2.0.rar
- 基于VC++的Excel封装库2.0 最新版
- 基于kinect的人体动作识别系统
- USB2.0接口电路设计与编程
- TC 2.0官方原版
- TC2.0 经典版 学C语言的必备软件
- TC 2.0 C语言编程
- Turbo c 2.0 汉化版(兼容win7)配合谭浩
- C语言 TC2.0
- Turbo C 2.0
评论
共有 条评论