【问题标题】:VisualBasic - Reading Kinect skeleton joints values and assign to LabelVisualBasic - 读取 Kinect 骨骼关节值并分配给标签
【发布时间】:2014-01-13 08:14:10
【问题描述】:

我不得不说,我对 VisualBasic 和 VisualStudio 非常陌生(我更熟悉 Java、android 和 web)。我刚刚找到了一个关于如何使用 VB 进行骨架跟踪的好教程。

在我的应用程序中,我有一个图片框(窗口的左半部分),其中显示了图像和骨架。另一半,我有一些标签,我想在其中显示骨骼关节的数值。

我已设法将值从shoulderright.X 分配给Label2,但它并非一直有效。它实际上仅在我构建应用程序后第一次运行时才有效。当我再次关闭并重新打开我的应用程序时,它显示“0”并保持不变。

这是我的代码:

If skeletons.Length <> 0 Then

    For Each skel As Skeleton In skeletons

        'Right Arm
        Dim shoulderright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.ShoulderRight).Position, DepthImageFormat.Resolution640x480Fps30)
        Dim elbowright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.ElbowRight).Position, DepthImageFormat.Resolution640x480Fps30)
        Dim wristright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.WristRight).Position, DepthImageFormat.Resolution640x480Fps30)
        Dim handright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.HandRight).Position, DepthImageFormat.Resolution640x480Fps30)
        gfx.DrawLine(penz, New Point(shoulderright.X, shoulderright.Y), New Point(elbowright.X, elbowright.Y))
        gfx.DrawLine(penz, New Point(elbowright.X, elbowright.Y), New Point(wristright.X, wristright.Y))
        gfx.DrawLine(penz, New Point(wristright.X, wristright.Y), New Point(handright.X, handright.Y))

        Label2.Text = shoulderright.X.ToString()  //assigning the value to the Label
        Label2.Update()

谁能建议我如何解决它?我尝试了很多变体,例如

Label2.Text = shoulderright.X.ToString
Label2.Update()

或者

Label2.Text = shoulderright.X.ToString()

谢谢。

【问题讨论】:

  • 我讨厌成为“那个人”,但是您使用 Visual Basic 有什么特别的原因吗?我问的原因是因为如果您是 VB 和 Visual Studio 的新手并且需要为 Kinect 编程,您可能会发现自己更习惯使用 C#,它更...实际上非常...类似于 Java,一种语言你说你很舒服。还有一些关于用 C# 编写的 Kinect 的教程。

标签: vb.net visual-studio label kinect kinect-sdk


【解决方案1】:

对于每个骨架,首先将“shoulderright”清零,获取一些值,然后将值分配给 Label2.Text。这将在您每次循环时覆盖标签。

尝试制作一个文本框并为每个骨架制作它:Textbox1.Text += Shoulderright.X.ToString() & vbCrLf (lineshift)

这应该列出循环中的每个值。

【讨论】:

  • 你首先将“shoulderright”归零是什么意思?很抱歉这样的问题,但就像我说的我对 vb 语法不是很熟悉
  • 在您的代码中,您将每个循环的值归零,因为您在循环内“调暗”了它。然后在下一个循环中删除该值并赋予一个新数字,这也覆盖了分配给 Label2.Text 的最后一个值。所以在你的代码中,你基本上只能看到最后一个肩膀右值。
  • 所以我是对的,我必须在循环之前将肩膀变量初始化为 0 对吗?如果是这样,我真的不知道该怎么做。我应该把肩膀右=0放在那里吗?那个肩膀的类型是什么?
【解决方案2】:

好的,让我们按原样使用您的代码,但改用我建议的文本框。确保文本框属性设置为多行:

If skeletons.Length <> 0 Then

For Each skel As Skeleton In skeletons

    'Right Arm
    Dim shoulderright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.ShoulderRight).Position, DepthImageFormat.Resolution640x480Fps30)
    Dim elbowright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.ElbowRight).Position, DepthImageFormat.Resolution640x480Fps30)
    Dim wristright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.WristRight).Position, DepthImageFormat.Resolution640x480Fps30)
    Dim handright As DepthImagePoint = kinz.MapSkeletonPointToDepth(skel.Joints(JointType.HandRight).Position, DepthImageFormat.Resolution640x480Fps30)
    gfx.DrawLine(penz, New Point(shoulderright.X, shoulderright.Y), New Point(elbowright.X, elbowright.Y))
    gfx.DrawLine(penz, New Point(elbowright.X, elbowright.Y), New Point(wristright.X, wristright.Y))
    gfx.DrawLine(penz, New Point(wristright.X, wristright.Y), New Point(handright.X, handright.Y))

    TextBox1.Text += shoulderright.X.ToString() & vbCrLf
Next

您现在可以看到文本框中的所有值了吗?

【讨论】:

  • Thanx,但它放了一大堆零,所以我什至看不到值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多