kinect 骨骼数据输出到文本文档里面 c#

kinect 骨骼数据输出到文本文档里面 c#,第1张

关于C#中timer类 在C#里关于定时器类就有3个

1定义在SystemWindowsForms里

2定义在SystemThreadingTimer类里

3定义在SystemTimersTimer类里

SystemWindowsFormsTimer是应用于WinForm中的,他是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API SetTimer实现的。他的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程式)无法使用。

SystemTimersTimer和SystemThreadingTimer很类似,他们是通过NET Thread Pool实现的,轻量,计时精确,对应用程式、消息没有特别的需要。SystemTimersTimer还能够应用于WinForm,完全取代上面的Timer控件。他们的缺点是不支持直接的拖放,需要手工编码。

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemData;

using SystemDrawing;

using SystemText;

using SystemWindowsForms;

using SystemTimers;

using SystemCollections;

namespace WindowsApplication1

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

SystemTimersTimer aTimer = new SystemTimersTimer();

aTimerElapsed += new ElapsedEventHandler(theout); //到达时间的时候执行事件;

// 设置引发时间的时间间隔 此处设置为1秒(1000毫秒)

aTimerInterval = 100000;

aTimerAutoReset = true;//设置是执行一次(false)还是一直执行(true);

aTimerEnabled = true; //是否执行SystemTimersTimerElapsed事件;

}

public void theout(object source, SystemTimersElapsedEventArgs e)

{

ArrayList AutoTask = new ArrayList();

AutoTaskAdd("8:30:00");

AutoTaskAdd("9:30:00");

AutoTaskAdd("10:30:00");

AutoTaskAdd("11:34:15");

for (int n = 0; n < 4; n++)

{

if (DateTimeNowToLongTimeString()Equals(AutoTask[n]))

{

MessageBoxShow("现在时间是" + AutoTask[n]);

}

}

}

Khoshelham K, Elberink S O Accuracy and resolution of kinect depth data for indoor mapping applications[J] Sensors, 2012, 12(2): 1437-1454

这篇期刊讲到原理,但是不知道具体函数到底是什么。

原理是根据一个参考平面,和图像上点的坐标来计算的

SDK 安装

kinect 是输入。类似鼠标 即时动态捕捉、影像辨识、麦克风输入、语音辨识

Kinect 是一组传感器的组合,包含一个彩色摄像头,一对深度摄像头(一个用以发射红

外,一个用以接收) ,一组麦克风阵列和底座马达。

彩色摄像头想必大家都已经很熟悉了。深度摄像头是由红外线提供的,返回画面上每个

点的深度值(离 Kinect 的距离,单位是 mm,标称精度约 5mm) 。麦克风阵列其实是数个水平放置的麦克风,因为彼此间有距离,所以可以识别说话人的方向,借此粗略估计是哪个玩家在说话,便于想象的话可以理解为类似声纳图(声音我们不涉及)。

读取彩色数据流,可以获得一张1080p的(19201080);

犹如拍照应用

看SDK自带示例

Color Depth D2D 彩色数据流

和许多输入设备不一样,Kinect 能够产生三维数据,它有红外发射器和摄像头。 Kinect SDK 从红外摄像头获取的红外数据后,对其进行计算处理,然后产生景深影像数据。

深度帧数据中,每个像素占 16 位,即每一个像素占 2 个字节。每一个像素的深度值只占用了 16 个位中的 13 个位。

获取每一个像素的距离很容易,但是要直接使用还需要做一些位 *** 作。如上图所示,深度值存储在第 3 至 15 位中,要获取能够直接使用的深度数据需要向右移位,将游戏者索引(Player Index)位移除

看SDK自带示例

Depth Basics-D2D 深度数据流

05-45米

25个关节点 每个关节点的 3D空间坐标和转向

看SDK自带示例

Body Basics D2D 骨骼数据流

示例:

Color Depth D2D 彩色数据流

Depth Basics-D2D 深度数据流

Coordinate Mapping Basics 扣出人物,置换背景

Body Basics D2D 骨骼数据流

kinect捕捉骨骼和体型没什么关系的,这个可能是你在skeleton数组中取的骨骼没有对应造成的

每个人从摄像头范围内移动到范围外的时候,骨骼信息是不会立刻清空的,这时体型相同的人进来时kinect会把他识别成同一个人,体型不同的人进来时skeleton数组就会新增了一条骨骼信息,这时你如果还是用第一个人的骨骼信息来跟踪这个人的话就肯定会出问题了。你需要的是找到和当前的人对应的骨骼信息。

20的sdk里 最基本的 不就是Bones Vertex吗。。骨骼点都有了 在Unity里 指定一下骨骼点不就好了,算骨骼点坐标的脚本 一搜有都是,要不自己算也成 kinect的骨骼点位置倒还好算,旋转比较恶心一点而 是用四元素算的。

用OPENNI 获得深度图 然后 有一个函数转换成世界坐标系下的真实坐标 也就是点云数据 然后可以存成PCD格式的文件 或者直接用例子进行处理。 不知道有没有别的方法 这只是我的想法。 仅供参考

以上就是关于kinect 骨骼数据输出到文本文档里面 c#全部的内容,包括:kinect 骨骼数据输出到文本文档里面 c#、Kinect 深度图像 转 三维坐标、Kinect结合Unity基础使用(一)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10105903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存