我正在玩Kinect驱动程序,CL NUI并尝试获取项目的相对深度.
库提供了一种获取表示屏幕上对象深度的图像的方法.这是一个例子:

有没有一种简单的方法可以将像素颜色转换为图像深度?例如,最接近的颜色可以是0的深度,最远的颜色可以是1的深度.
有谁知道这是怎么做到的吗?
我找到了关于如何将深度数据转换为颜色的这些问题,我想要的是反过来:
float RawDepthToMeters(int depthValue)
{
if (depthValue < 2047)
{
return float(1.0 / (double(depthValue) * -0.0030711016 + 3.3309495161));
}
return 0.0f;
}
Vec3f DepthToWorld(int x, int y, int depthValue)
{
static const double fx_d = 1.0 / 5.9421434211923247e+02;
static const double fy_d = 1.0 / 5.9104053696870778e+02;
static const double cx_d = 3.3930780975300314e+02;
static const double cy_d = 2.4273913761751615e+02;
Vec3f result;
const double depth = RawDepthToMeters(depthValue);
result.x = float((x - cx_d) * depth * fx_d);
result.y …Run Code Online (Sandbox Code Playgroud) 我正在为C#/ WPF应用程序中的Kinect SDK构建一个手势系统.我想为放大镜放大和缩小添加手势.我更喜欢使用内置的Windows放大镜或其底层逻辑,但任何获得类似效果(多显示器感知)的方法都可以.
如何以编程方式调用Windows放大镜的缩放功能?
到目前为止,我唯一希望找到的是启动过程并通过Win32单击按钮; 但当我这样做时,当我调用放大镜窗口的手柄时,它会拉出一个空白的空窗口.
我通过结合我所知道的C#,一堆Win32 API调用,我真的不太了解,以及大量的Google搜索来修补这些代码.
private void ZoomIn()
{
// Make sure the Magnifier is running, and get its handle
if (Process.GetProcesses().Where(p => p.ProcessName.ToLower() == "magnify").Count() == 0) {
Process.Start("magnify.exe");
System.Threading.Thread.Sleep(500); }
IntPtr handle = Process.GetProcesses().Where(p => p.ProcessName.ToLower() == "magnify").First().Handle;
// Figure out what size ("mode") it's in
WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
placement.length = Marshal.SizeOf(placement);
GetWindowPlacement(handle, ref placement);
// Move the Magnifier to a predetermined location so we know where to click
MoveWindow(handle, new Point(0, 0)); …Run Code Online (Sandbox Code Playgroud) 我一直在使用SimpleCV来查找与自动驾驶机器人一起使用的blob.问题是当我在SimpleCV中调用findBlobs命令时.当我完全阻挡Kinect相机的镜头时,PyGame崩溃给我这个错误:
致命的Python错误:( pygame降落伞)分段错误
有时它会起作用,有时甚至会在镜头解锁时崩溃.当我运行超过大约30秒时,它几乎总会崩溃.我已经在SimpleCV中重新安装并修复了许多问题,并尝试重新安装Pygame,它似乎没有任何帮助.另外,我使用X-Box kinect作为我的相机源.我正在使用Ubuntu 11.04.
这是我的确切代码:
from SimpleCV import *
from SimpleCV.Display import *
from time import sleep
k = Kinect()
dis = Display()
while 1:
depth = k.getDepth()
depth = depth.invert()
depth = depth.erode()
blobs = depth.findBlobs(threshval=127, minsize=10, maxsize=0)
if blobs:
blobs.draw()
depth.save(dis)
sleep(0)
Run Code Online (Sandbox Code Playgroud) 我有一个Kinect设备,正在使用C#开发一个程序。
为了管理设备,我使用AllFramesReady事件来处理深度和颜色信息。
我创建了一个事件处理程序来处理名为的数据EventHandler1。我在此事件处理程序中进行了大量处理。
我想在名为的第二个事件处理程序中进行更多计算EventHandler2。
是否有可能在主进程的2个不同线程上并行运行这2个基本上是2个函数的事件处理程序?如果可能的话,请给我一个示例代码来做这个吗?
我现在正在检测wpf应用程序中的所有骨架,我想知道如何检测手指与骨骼一起出现?我正在使用microsoft Kinect for windows sdk ver 1.5
非常感谢
我有一个Skeleton skeleton来自这个SkeletonFrameReady活动.而且我有一个在窗户上绘制骷髅的功能,
void DrawSkeleton(Skeleton s),
Run Code Online (Sandbox Code Playgroud)
它以Skeleton作为输入,并将骨架的2D图像绘制到我的窗口.
现在,我想改变右手的x和y值,并使用相同的函数在窗口上绘制它void DrawSkeleton(Skeleton s).
但是,当我尝试做类似的事情时:
skeleton.Joints[JointType.HandRight].Position.X = 3;
Run Code Online (Sandbox Code Playgroud)
它不允许我这样做:
无法修改'Microsoft.Kinect.Joint.Position'的返回值,因为它不是变量.
这可能是因为Position它不是一个变量,是一个属性.
题:
如何复制Skeleton对象并更改该对象上Position的Joints 值.
我正在搜索有关骨架跟踪算法如何在Microsoft Kinect上运行的信息.我需要理论基础,而不是使用某些SDK实现骨架跟踪的示例.有没有人有关于它的信息.它对所有SDK(Microsoft SDK,OpenNI,OpenKinect)是否相似,或者取决于它们.我将非常感谢任何信息.
我在Visual Studio中创建了一个WPF项目.XAML标记由C#代码隐藏管理.我想要做的是在用户界面上创建一个组件,它将显示一个3D场景.我希望这个3D场景由Unity管理,因为我需要利用Unity的物理引擎.用户必须能够通过Kinect识别的手势(例如抛球)与此3D场景进行交互.
有什么方法可以连接WPF,Unity3D和Kinect,以便用户能够以这种方式操作3D场景吗?如果是这样,你能提供一些示例/教程吗?如果没有,让用户使用Kinect手势操纵3D场景的最佳方法是什么?
我正在使用kinect的rgb数据跟踪一个球.在此之后,我查找相应的深度数据.这两项工作都非常出色.现在我想要实际的x,y,z世界坐标(即骨架空间)而不是x_screen,y_screen和深度值.不幸的是,kinect sdk(http://msdn.microsoft.com/en-us/library/hh973078.aspx)提供的方法对我没有帮助.基本上我需要一个函数"NuiImageGetSkeletonCoordinatesFromColorPixel",但我不存在.所有功能基本上都是相反的
我知道这可能是用openNI完成的,但由于其他原因我无法使用它.
是否有一个功能可以为我做这个或我必须自己做转换?如果我必须自己做,我该怎么做?我勾画了一个小图http://i.imgur.com/ROBJW8Q.png - 你认为这会有用吗?
最近我一直在尝试学习OpenCV并尝试使用Haar分类器检测面部.
当我从默认网络摄像头获取视频流时,我成功地检测到了脸部,但是当我使用Kinect而不是默认网络摄像头时,它仍会检测到脸部,但帧速率会大幅下降.
我写的代码是
int main() {
string haar_face = "F:\haarcascade_frontalface_default.xml";
CascadeClassifier haar_cascade;
haar_cascade.load(haar_face);
if (haar_cascade.empty()) {
return -1;
}
vector<Rect_<int>> faces;
bool optionKinect = false;
cout << "Choose Option\n1.) Kinect \n>1.) WebCam\n";
int choice;
cin >> choice;
if (choice == 1) {
optionKinect = true;
}
if (optionKinect) {
CKinectStreamsMat* kinectStream = new CKinectStreamsMat();
kinectStream->initSensor();
while (true) {
Mat original, gray;
Mat face;
Rect face_i;
//cap >> original;
original = kinectStream->getColorFrame();
if (original.data) {
cvtColor(original, gray, CV_BGR2GRAY);
haar_cascade.detectMultiScale(gray, faces);
int …Run Code Online (Sandbox Code Playgroud)