以下言论和代码仅供参考,因为是自己对kinect的理解,会有错漏。
kinect的简单动作捕捉是通过其RGB摄像头(3 个摄像头之一)捕捉的。目前beta2版本里至少可以追踪21个关节点(如头,左肩膀,肩膀中心,有肩膀,脊椎,左右肘,手腕,脚踝,左右中臀)。可以在这里找得到Microsoft.Research.Kinect.Nui.JointID
Kinect有3个摄像头,除了上面说到的那个,还有分别作3D深度识别和感知器。注意3D深度识别,用下面的代码你能大概理解深度识别的意义和用法。如下:
using Microsoft.Research.Kinect.Nui;
public void GetCoordinates(Joint joint, out float x, out float y)
{
skeletonEngine.SkeletonToDepthImage(joint.Position, out x, out y);
x = (float)(x * rootCanvas.ActualWidth);
y = (float)(y * rootCanvas.ActualHeight);
}
Tip: SkeletonEngine is a type/object of Microsoft.Research.Kinect.Nui namespace.
注意这个方法 "SkeletonToDepthImage" ,传入一个关节(或称为捕捉点),会返回其x,y坐标值。
这个坐标值做什么用呢?
可以根据其值用来计算你要截取从图像X,Y坐标位置处开始的图像。 代码示例如下:
public BitmapSource GetFrame()
{
ImageFrame imgFrame;
try
{
imgFrame = kinectRuntime.VideoStream.GetNextFrame(3000);
}
catch (Exception)
{
return null;
}
PlanarImage Image = imgFrame.Image;
if (this.lastHeadPoint != null)
{
float Xcenter = 0;
float Ycenter = 0;
skeletonDisplayManager.GetCoordinates((Joint)this.lastHeadPoint, out Xcenter, out Ycenter);
// calculate the Rectangle coordinates in whom to search for a match
int width = 288;
int height = 400;
int X = (int)Xcenter - width / 2;
int Y = (int)Ycenter - height / 2;
// double check that we are not croping outside the image
X = X < 0 ? 0 : X;
Y = Y < 0 ? 0 : Y;
X = X + width >= 1280 ? 1280 - width : X;
Y = Y + height >= 1024 ? 1024 - height : Y;
BitmapSource ColorBitmap = BitmapSource.Create(image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);
// do the crop
CroppedBitmap cb = new CroppedBitmap(ColorBitmap, new Int32Rect(x, y, width, height));
ColorBitmap = cb;
returnColorBitmap;
}
}
X,Y坐标跟图像细细相关,比如这个方法:
ColorBitmap = BitmapSource.Create(Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);
咋看起来参数有些复杂,其实只需关注2点:即图像本身和你要定位的X,Y坐标。
图像对象ImageFrame来自于Kinect自己的SDK:Microsoft.Research.Kinect.Nui.
.NET的命名空间System.Windows.Media.Imaging.BitmapSource和CroppedBitmap会被经常引用在Kinect开发中。就像上面的方法BitmapSource.Create需要BitmapSource来创建一个图形。
还有一个kinect的核心对象Runtime,通过它可以获得很多对象,比如camera和image,video对象。
to be continued.....
分享到:
相关推荐
kinect-v2修复深度图像并用修复后图像进行彩色深度配准并,用opencv显示配准结果,并获取场景中所有点的三维坐标,用opengl显示三维场景
是一个简单易懂的用Kinect获取深度图像的程序
Kinect 实现骨骼点获取和深度图像显示,目前还没有获取骨骼点坐标。
matlab开发-用于Windows传感器的Kinect的工具箱支持包的图像获取。从Kinect for Windows传感器获取视频和图像。
一个用Kinect获取彩色图像的小程序,很适合初学者研究一下。
在网上搜索了好久没有发现kinect使用红外图像的,但是在AR/VR中可能会用到的,只能自己慢慢摸索了。现在已经完成,大家可以下载了。
同时采集Kinect的深度图像和彩色图像,并且可实时将同一时刻采集的两种图像保存到相应目录。
NULL 博文链接:https://yacare.iteye.com/blog/1921786
将kinect获取的彩色图像映射到深度坐标下,用OpenCV显示彩色图像以及深度图像并显示结果。并比较了两种配准方法,一种为简单图像变换,一种是深度彩色之间坐标变换。
kinect matlab校正论文 可以同时校正深度和正彩色图像 并且可以校正深度图像和彩色图像之间的偏差
为解决传统的使用视频彩色图像序列的智能监控容易受光照、颜色等因素影响的问题,提出结合Kinect深度图像和支持向量机的人体动作识别方法.利用Kinect在监控区域获得实时深度图像,并进行背景擦除,滤波处理和提取Haar...
kinect学习总结,获取并显示图片,并且自定义保存RGB和深度数据到文件中,仅供参考
vs2010+kinect1
通过opencv获取kinect深度图以及彩色图
本文在VS2012开发平台上面配置PCL1.7.2+Kinect V 2.0SDK+opencv2.4.9 ,使用最新的Kinect V 2.0传感器设备获取场景中的深度图像和彩色图像,并将二者转换保存为PCL数据库所使用的PCD点云数据格式,然后借助编程算法...
Kinect获取彩色图像并实时显示彩色图像信息,通过按下‘y’键将获取的彩色图像保存为jpg图片,程序可以连续获得jpg图片
Kinect_Kinect Hands Finger Tracking and Voxel UI.pptx
COpenNI这个类主要是初始化kinect设备,并获取深度图像和颜色图像,参加上一篇博客的初始化过程步骤,如果遇到错误,则有相应的错误处理过程。CKinectReader类是将COpenNI这个类读取到的结果显示在Qt的界面上的。...
1.版本:matlab2021a,我录制了仿真操作录像,可以跟着操作出仿真结果 ...3.内容:Kinect相机进行图像采集并进行3D重建matlab仿真,输入不同视角的图像,输出场景的三维模型。 4.适合人群:本,硕等教研学习使用