如何使用Kinect显示彩色图像和深度图像

如何使用Kinect显示彩色图像和深度图像,第1张

[csharp] view plain copy

using System

using System.Collections.Generic

using System.Linq

using System.Text

using System.Windows

using System.Windows.Controls

using System.Windows.Data

using System.Windows.Documents

using System.Windows.Input

using System.Windows.Media

using System.Windows.Media.Imaging

using System.Windows.Navigation

using System.Windows.Shapes

using Microsoft.Kinect

namespace WpfApplication2

{

/// <summary>

/// MainWindow.xaml 的交互逻辑

/// </summary>

public partial class MainWindow : Window

{

public MainWindow()//vs2010自动生成的。

{

InitializeComponent()

}

private KinectSensor _kinect//一个全局变量,自然是用来调用Kinect用的,

private void startKinect()

{

if (KinectSensor.KinectSensors.Count >0)//如果有一个Kinect是可以使用的。

{

_kinect = KinectSensor.KinectSensors[0]//打开第一个Kinect

MessageBox.Show("kinect 目前的状态为:" + _kinect.Status)//这里调用一个messagebox来显示现在的状态。

_kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30)

_kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30)

_kinect.SkeletonStream.Enable()//使能skeleton

_kinect.AllFramesReady +=

new EventHandler<AllFramesReadyEventArgs>(_kinect_AllFramesReady) //大概意思就是添加一个事件处理程序吧,类似于单片机中的//中断。

_kinect.Start()//设置完成之后启动Kinect

}//if

else

{

MessageBox.Show("没有任何Kinect设备")

}

}//start kinect

void _kinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)//打开并显示彩色图像的具体程序。

{

using (ColorImageFrame colorFrame = e.OpenColorImageFrame())

{

if (colorFrame == null)

{

return

}//if null

byte[] pixels = new byte[colorFrame.PixelDataLength]

colorFrame.CopyPixelDataTo(pixels)

int stride = colorFrame.Width * 4

imageCamera.Source =//这个imageCamera变量时在mainFrame中定义的一个Image控件。

BitmapSource.Create(colorFrame.Width, colorFrame.Height,

96, 96, PixelFormats.Bgr32, null, pixels, stride)

}

//throw new NotImplementedException()

}

private void Window_Loaded(object sender, RoutedEventArgs e)//当第一次窗体加载时,调用StartKinect。

{

startKinect()

}

}

}

[csharp] view plain copy

在python中numpy是很好用的数据处理包。不了解你说的数据结构但是可以尝试把数据转成numpy的md数组格式。之后可以在数组中进行检查看是不是所有的三通道都相等。如果说这样的话那么理论上三通道和三通道代表的信息都是一样的,直接在里面切片不会影响结果。

SDK 安装

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

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

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

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

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

读取彩色数据流,可以获得一张1080p的图片(1920*1080)

犹如拍照应用

看SDK自带示例

Color Depth D2D 彩色数据流

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

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

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

看SDK自带示例

Depth Basics-D2D 深度数据流

0.5-4.5米

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

看SDK自带示例

Body Basics D2D 骨骼数据流

示例:

Color Depth D2D 彩色数据流

Depth Basics-D2D 深度数据流

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

Body Basics D2D 骨骼数据流


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

原文地址:https://54852.com/yw/8215654.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存