EmguCV+Kinect2.0获取BodyIndex图
来源:互联网 发布:知客是什么意思 编辑:程序博客网 时间:2024/06/06 09:03
我的环境为KinetSDK2.0+EmguCV3.0.0+vs2015
依旧为WinFrom ,并在主窗口内拖入ImageBox
不知道ImageBox的可以看我之前的博文http://blog.csdn.net/qq_22033759/article/details/47299269
代码中需要用到指针,需要在项目属性中调一下
上代码
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Microsoft.Kinect;using Emgu.CV;using Emgu.CV.Util;using Emgu.CV.CvEnum;using Emgu.CV.Structure;using Emgu.Util;namespace EmguCV_Kinect_2{ public partial class Form1 : Form { KinectSensor kinect = null; BodyIndexFrameReader bindexframereader = null; FrameDescription fd = null; Image<Bgra, byte> bodyindeximg; byte[] data = null; public Form1() { InitializeComponent(); kinect = KinectSensor.GetDefault(); bindexframereader = kinect.BodyIndexFrameSource.OpenReader(); bindexframereader.FrameArrived += Bindexframereader_FrameArrived; fd = kinect.BodyIndexFrameSource.FrameDescription; bodyindeximg = new Image<Bgra, byte>(fd.Width, fd.Height); data = new byte[fd.LengthInPixels*4]; kinect.Open();Console.WriteLine(bodyindeximg.Bytes.Count<byte>()); } private unsafe void ProcessBodyIndexFrameData(IntPtr bodyIndexFrameData, uint bodyIndexFrameDataSize) { byte* frameData = (byte*)bodyIndexFrameData; for (int i = 0; i < (int)bodyIndexFrameDataSize; ++i) { if (frameData[i] <6) { this.data[i*4] = 0; this.data[i * 4+1] = 0; this.data[i * 4+2] = 150; this.data[i * 4+3] = 255; //人物显示为红色 } else { this.data[i*4] =0; this.data[i * 4+1] = 0; this.data[i * 4+2] = 0; this.data[i * 4+3] = 255; //背景显示为黑色 } } } private void Bindexframereader_FrameArrived(object sender, BodyIndexFrameArrivedEventArgs e) { using (BodyIndexFrame bframe = e.FrameReference.AcquireFrame()) { if (bframe != null) { using (KinectBuffer kB = bframe.LockImageBuffer()) { if(fd.Width*fd.Height==kB.Size) this.ProcessBodyIndexFrameData(kB.UnderlyingBuffer, kB.Size); bodyindeximg.Bytes = data; imageBox1.Image = bodyindeximg; } } } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (this.kinect != null) { this.kinect.Close(); this.kinect = null; } } }}运行图如下:
再安利一个日本人写的博客,写的不错,只不过要用翻译才能看的懂,用的是opencv+kinectsdk
地址在这:http://www.buildinsider.net/small/kinectv2cpp
0 0
- EmguCV+Kinect2.0获取BodyIndex图
- Opencv+Kinect2.0获取BodyIndex图像
- Kinect2.0+EmguCV获取景深图
- EmguCv +Kinect2.0 获取面部信息
- EmguCV+Kinect2.0 实时抠图
- EmguCV+Kinect2.0获取高清面部帧
- Opencv+Kinect2.0获取景深图
- Kinect2.0+OpenCV获取骨骼图
- Opencv+Kinect2.0 的环境配置和获取彩色图
- kinect2.0开发笔记(三) 获取红外图
- kinect2.0开发笔记(二) 获取彩色图和深度图
- kinect2.0的骨骼节点坐标的获取与handstate
- Kinect2.0+Opencv获取高清面部信息
- kinect2.0+opencv获取图像和深度图像
- C#+Emgucv视频获取
- EmguCV获取kinect的彩色帧和红外图
- kinect2.0 之摄像头
- kinect2.0骨骼数据
- JavaScript权威指南_154_第16章_脚本化CSS_16.4-查询计算出的样式
- 谈谈对数据库的认识
- arm汇编按键控制led灯
- 从程序的执行过程的角度去编写IRQ中断框架代码
- 闭包
- EmguCV+Kinect2.0获取BodyIndex图
- 解决php支付宝接口支付时会跳到一个确定按钮页
- Android滑动页面导航效果: PagerSlidingTabStrip
- ZOJ 1610 Count the Colors 线段树/暴力模拟
- ubuntu系统 ln 命令使用说明,创建链接
- uva 11524 Values whose Sum is 0
- 并查集 杭电1232畅通工程
- 剑指offer面试题java版系列 题1 Singleton模式
- BAPC2014 K&&HUNNU11591:Key to Knowledge(中途相遇法)