标签: kinect

使用Kinect去除背景:围绕体形消除噪音

目标是在不同的背景上显示人(也称为背景移除).

我正在使用Kinect和微软的Beta Kinect SDK这样做.借助深度,背景被过滤,我们只得到人的形象.

这很简单,我们可以找到在Internet上无处不在的代码.然而,深度信​​号是有噪声的,并且我们得到不属于所显示的人的像素.

我应用了边缘检测器来查看它是否有用,我目前得到了这个:

这是另一个没有边缘检测:

在此输入图像描述

我的问题是:我可以通过哪种方式摆脱这些嘈杂的白色像素?

我尝试了形态学操作,但身体的某些部分被擦除,仍留下白色像素.

该算法不需要是实时的,我可以在按下"保存图像"按钮时应用它.

编辑1:

我只是尝试用形状边框上最近的帧做背景减法.你看到的单个像素是闪烁的,这意味着它是噪音,我可以很容易地摆脱它们.

编辑2:

该项目现已结束,这就是我们所做的:使用OpenNI驱动程序手动校准Kinect,该驱动程序直接提供红外图像.结果非常好,但每次校准都是针对每个Kinect的.

然后,我们在边框上应用了一点透明度,结果看起来非常棒!但是,我无法提供图片.

image-processing kinect

9
推荐指数
1
解决办法
3795
查看次数

如何使用Kinect跟踪一个人(trackingID)

我想跟踪第一个人,并使用此人的右手导航我制作的应用程序.

我可以接管光标,现在我只想跟踪一个人.所以基本上当一个人在节目中导航,并且有人走在他身后或正在寻找这个人时,如果他们移动,那么kinect就不应该认出其他人.

我怎么能实现这一点,我知道它与trackingId什么有关呢?:■

        foreach (SkeletonData s in allSkeletons.Skeletons)
        {

                if (s.TrackingState == SkeletonTrackingState.Tracked)
                {
                    if (s.TrackingID == 0)
                    {

                        foreach (Joint joint in s.Joints)
                        {
                        }
                    }
                }
        }
Run Code Online (Sandbox Code Playgroud)

c# wpf tracking gesture-recognition kinect

9
推荐指数
1
解决办法
6756
查看次数

使用顶点缓冲区对象(VBO)渲染Kinect点云

我正在尝试制作动态点云可视化工具.使用Kinect传感器每帧更新点数.为了抓住帧我使用OpenCV和GLUT来显示.对于点xyz位置,OpenCV API返回640 x 480(float*),对于rgb颜色数据,返回640 x 480(int*).为了获得最大性能,我尝试在流模式下使用顶点缓冲区对象而不是简单的顶点阵列.我能够使用Vertex Array渲染它,但是我的VBO实现没有渲染任何东西.我在声明中尝试了一堆不同的命令,但我找不到我所遗漏的东西.有人可以试着指出我正确的方向吗?以下是简化的代码:(我已经重写了Christian Rau提出的错误版本,所以你们可以理解我的错误)

int main()
{
    //Delaring variables, inittiating glut, setting camera and checking the compatibility as http://www.songho.ca/opengl/gl_vbo.html
    glutDisplayFunc(displayCB);
    glutIdleFunc(displayCB); 
    ... 
    //Inittiating the vertex buffers
    if(vboSupported)
    {
        glGenBuffers(1, &vertex_buffer);
        glBindBuffer(GL_ARRAY_BUFFER_ARB, buffer);
        glBufferData(GL_ARRAY_BUFFER_ARB, (sizeof(GLfloat) * 640 * 480 * 3), 0, GL_STREAM_DRAW_ARB);
        glBufferSubData(GL_ARRAY_BUFFER_ARB, 0,  (sizeof(float) * 640 * 480 * 3), point_cloud.points_position); 

        glGenBuffers(2, &color_buffer);
        glBindBuffer(GL_ARRAY_BUFFER_ARB, buffer);
        glBufferData(GL_ARRAY_BUFFER_ARB, (sizeof(GLbyte) * 640 * 480 * 3), 0, GL_STREAM_DRAW_ARB);
        glBufferSubData(GL_ARRAY_BUFFER_ARB, 0,  (sizeof(char) * 640 * 480 * 3), point_cloud.points_color); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl stream vbo kinect

8
推荐指数
1
解决办法
2858
查看次数

OpenNI RedistMaker - 在Mac OS上构建失败

我按照README中的OpenNI安装指南https://github.com/OpenNI/OpenNI.我也安装了libtool和libusb.但是,当我./RedistMaker在Platform/Linux-x86/CreateRedist下运行时,我收到了这样的错误消息:

PrimeSense OpenNI Redist * 
2011-10-12 23:18:46 * ********************************* 
Taking version... version is 1.3.3.6 
Building OpenNI... In file included from ../../../../Source/OpenNI/ 
XnDump.cpp:25: ../../../../Include/XnDump.h:167: warning: ‘warning’ 
attribute directive ignored ../../../../Include/XnDump.h:168: warning: 
‘warning’ attribute directive ignored ../../../../Include/XnDump.h: 
169: warning: ‘warning’ attribute directive ignored ../../../../ 
Include/XnDump.h:170: warning: ‘warning’ attribute directive 
ignored ../../../../Include/XnDump.h:171: warning: ‘warning’ attribute 
directive ignored ../../../../Include/XnDump.h:172: warning: ‘warning’ 
attribute directive ignored In file included from ../../../../Source/ 
OpenNI/XnDump.cpp:25: ../../../../Include/XnDump.h:167: warning: 
‘warning’ attribute directive ignored ../../../../Include/XnDump.h: 
168: warning: ‘warning’ …
Run Code Online (Sandbox Code Playgroud)

kinect openni

8
推荐指数
1
解决办法
834
查看次数

用于手指检测的Kinect SDK?

我是新加坡南洋理工大学(NTU)的学生.目前正在使用Kinect SDK开发项目.

我的问题是,任何人都知道如何使用Kinect SDK开发一个程序来检测手指(或指尖),甚至可能是一些可能的参考代码.无论如何,我也尝试在谷歌搜索,但我得到的唯一参考是使用Open NI,而不是Kinect SDK.

感谢致敬

c# sdk tracking kinect

8
推荐指数
1
解决办法
8110
查看次数

Kinect SDK播放器检测

我刚刚创建了一个2人游戏(比如ShapeGame),但问题是当其中一个玩家离开游戏场景时,我无法察觉哪一个(哪个玩家)从游戏中离开.

认为游戏中有2辆车.首先检测到的玩家(称之为player1)使用左侧玩家而玩家2使用右侧玩家.当player1离开场景时,突然player2控制左车,如果player1重新加入游戏,则player1再次取回对左车的控制权,并且player2控制右车.

int id = 0;  
foreach (SkeletonData data in skeletonFrame.Skeletons)
{
    if (SkeletonTrackingState.Tracked == data.TrackingState)
    {
        // do some work

        id++;
    }
}
Run Code Online (Sandbox Code Playgroud)

事情是id = 0第一个检测到的玩家(称之为player1)的程序给出,第二个被检测的玩家(称之为player2)为1.当player2从游戏中退出并重新加入时,没有问题.它再次需要id = 1.但是当玩家1离开游戏时,玩家2 id = 0因为它是此时第一个被检测到的玩家.

有解决方案吗

c# kinect

8
推荐指数
1
解决办法
4015
查看次数

Kinect深度图像

在我的应用程序中,我得到的深度框架类似于从深度基础样本中检索到的深度框架.我不明白的是,为什么图像中存在离散的水平?我不知道我称之为深度值的这些突然变化.很明显,我右手的一半都是黑色的,我的左手似乎分为3个这样的等级.这是什么以及如何删除它?

Kinect Depth Basics示例http://i46.tinypic.com/2hwekxd.jpg

当我运行KinectExplorer示例应用程序时,我获得如下深度.这是我想从原始深度数据生成的深度图像.

Kinect Explorer http://i50.tinypic.com/2rwx1z5.jpg

我正在使用Microsoft Kinect SDK(v1.6)NuiApi和OpenCV.我有以下代码:

BYTE *pBuffer = (BYTE*)depthLockedRect.pBits; //pointer to data having 8-bit jump
USHORT *depthBuffer = (USHORT*) pBuffer; //pointer to data having 16-bit jump
int cn = 4;
this->depthFinal = cv::Mat::zeros(depthHeight,depthWidth,CV_8UC4); //8bit 4 channel
for(int i=0;i<this->depthFinal.rows;i++){
   for(int j=0;j<this->depthFinal.cols;j++){
      USHORT realdepth = ((*depthBuffer)&0x0fff); //Taking 12LSBs for depth
      BYTE intensity = (BYTE)((255*realdepth)/0x0fff); //Scaling to 255 scale grayscale
      this->depthFinal.data[i*this->depthFinal.cols*cn + j*cn + 0] = intensity;
      this->depthFinal.data[i*this->depthFinal.cols*cn + j*cn + 1] = intensity;
      this->depthFinal.data[i*this->depthFinal.cols*cn + j*cn …
Run Code Online (Sandbox Code Playgroud)

opencv kinect kinect-sdk

8
推荐指数
2
解决办法
6089
查看次数

如何使用OpenCV为Kinect项目设置OpenNI 2.0?

我正在做我的最后一年项目.我需要与Kinect合作来检测手部动作.我尝试了几种方法并得到了一些结果,但是,没有一种能够满足项目的需求.我很久以前就看过这个视频了,刚才知道他们最近开源了.所以我试一试.

我现在的问题是如何设置.

上面这个很棒的项目使用OpenNI和Kinect.我尝试按照OpenCV教程从源代码构建它,让OpenCV与OpenNI一起工作.

问题:

  1. 它说:"对于OpenNI框架,您需要安装开发版本和PrimeSensor模块." 但是当我按照链接时,他们中的一些人已经死了.似乎OpenNI 2.0不再使用PrimeSensor了.

  2. 它还说在Cmake文件夹中,一个是OpenCV/Src,另一个是/build.但我下载的OpenCV没有任何Src文件夹.

  3. 我仍然将整个文件夹用作Src,并将其构建到构建文件夹并进行检查WITH OPENNI.我在我下载的OpenNI2中使用了Include和Lib文件夹,但是当我构建OpenCV解决方案(已经从CMake生成)时,所有构建都失败了.

  4. 此外,在使用Cmake生成时,即使我未来的OpenCV解决方案已经成功构建(事实并非如此),Cmake也会一直告诉我PrimeSense是如何无法使用的,这让我感到非常不安全.:(

  5. 我对32位和64位有点困惑.我想要遵循的上述项目说它适用于64位.但我使用MS C++ Express,所有项目都是32位.那么我应该使用哪些PrimeSense驱动程序(在OpenNI2中给出)?

有谁能告诉我如何将所有这些东西(OpenNI2.0,OpenCV 2.4.3,PrimeSense)放在一起,这样我就可以使用Kinect了?

opencv kinect openni

8
推荐指数
1
解决办法
1万
查看次数

使用Openni从Kinnect捕获RGB并使用OpenCV进行显示

我需要从Kinnect相机捕获彩色RGB图像,但我想在OpenCV中显示它,因为这只是更大程序的一部分.我知道如果你设置了标志,OpenCV与OpenNI兼容,但是虽然我努力了但是CMake找不到OpenNI2的路径所以我无法使用OpenNI构建OpenCV.无论如何,我认为知道如何手动将OpenNI帧转换为openCV帧是很好的,所以我决定采用这种方式.

为了在OpenNI中捕获颜色框架,我尝试了以下方法:

openni::Device device;  
openni::VideoStream  color;
openni::VideoFrameRef colorFrame;

rc = openni::OpenNI::initialize();
rc = device.open(openni::ANY_DEVICE);
rc = color.create(device, openni::SENSOR_COLOR);
rc = color.start();

color.readFrame(&colorFrame);
const openni::RGB888Pixel* imageBuffer = (const openni::RGB888Pixel*)colorFrame.getData();
Run Code Online (Sandbox Code Playgroud)

但现在我不明白如何转换为cv :: Mat.

有没有人管这样做?

rgb opencv kinect simple-openni

8
推荐指数
1
解决办法
8498
查看次数

无法使用 [OpenCV] cv2.VideoCapture.set() 设置帧的宽度和高度

我正在尝试将视频捕获的帧/窗口大小减小到,320x180但我似乎无法做到。我正在使用适用于 Xbox One 的 Windows Kinect,它使用适配器连接到我的电脑。

我曾尝试将 设置cv2.CAP_PROP_FRAME_WIDTH为 320 和cv2.CAP_PROP_FRAME_HEIGHT180,但是一旦我尝试获取它返回的值 1920 和 1080。我还尝试安装和重新安装 Kinect SDK 和驱动程序。

import cv2
import numpy as np

vid = cv2.VideoCapture(0)

vid.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
vid.set(cv2.CAP_PROP_FRAME_HEIGHT, 180)
vid.set(cv2.CAP_PROP_FPS, 25)

print(vid.get(cv2.CAP_PROP_FPS))
print(vid.get(cv2.CAP_PROP_FRAME_WIDTH))

while True:
    ret, frame = vid.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame', gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

vid.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

打印输出

我想帮助了解问题的根源并希望得到解决。

python video opencv video-capture kinect

8
推荐指数
2
解决办法
2万
查看次数