0

是否有可能以某种方式从不同角度的 kinect 中获取深度像素?就像说 kinect 正在从上面记录我,我想获取深度像素,因为它从前面看到我?

我已经看到人们使用点云的例子,并且可以从这些数据中旋转创建的网格(从这些点),即使 kinect 是从上面记录下来的人,仍然可以使用这些点云将网格旋转为它是从前面或脚下看到的(这真的很酷!)。

那么我可以从点云中创建自己的深度像素吗?任何指针将不胜感激。

4

1 回答 1

0

好吧,我以一种非常丑陋的方式解决了这个问题。至少我是这么认为的。如果其他人有更好的想法,请发布!

所以我所做的是从点云创建一个网格(如在 ofxKinect 示例中所见)将其绘制到 FBO 并将其包裹在着色器周围,该着色器为片段的深度值着色。这样我就得到了 [0-1] 的彩色范围。

之后,回到 CPU 上,我能够使用 readToPixels 从 FBO 获取像素并将这些像素绘制到 ofImage 中。从 ofImage 我可以对图像上每个像素的颜色进行采样(现在在灰度深度范围内)。

叹息,现在,循环遍历每个像素 x 和 y 我检查每个像素的颜色并获取该值并进行一些计算以查看该颜色值在 0-255 范围内的位置(如常规 kinect.getDepthPixels(.. .) 数据)为:

int size = sizeof(unsigned char) * ( ofGetHeight() * ofGetWidth() );
unsigned char* p = (unsigned char*)malloc(size);
for (int x = 0; x < ofGetWidth(); x++)
{
    for (int y = 0; y < ofGetHeight(); y++)
    {
        ofColor col = sampleImg.getColor(x, y);
        float d = 0.0f;

        if (col.a != 0)
        {
            d = (float)(col.r * 3) / 765.0f;
            d = d * 255.0f;
        }

        int id = (y*1) + x;
        p[id] = d;
    }
}

p我得到一个 unsigned char 数组,其值范围为 [0-255],如 kinect.getDepthPixels() 函数,但基于深度纹理,我现在拥有来自点云的深度数据。

这尚未经过全面测试,但我认为这是朝着正确方向迈出的一步。而且我不太喜欢这个解决方案,但我希望它可以帮助其他人,因为我整天都在疯狂地搜索,没有太多帮助。我可能只是把事情复杂化了很多,但我们会看到的。

于 2013-07-08T14:47:40.680 回答