首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kinect从任意角度获取深度像素?

Kinect从任意角度获取深度像素?
EN

Stack Overflow用户
提问于 2013-07-08 08:59:22
回答 1查看 724关注 0票数 0

有可能以不同的角度从kinect中得到深度像素吗?比如说kinect是从上面记录我的,我想获取深度像素,就像它从前面看到我一样?

我见过人们使用点云的例子,并且可以从这些数据中旋转创建的网格(从这些点),即使kinect是,比如说,从上面记录下来的人,仍然可以用这些点云旋转网格,就像从前面或脚下面看到的那样(这真的很酷!)

所以,也许我能从点云中创造出我自己的深度像素吗?任何指示都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-07-08 14:47:40

好吧,我用一种很难看的方式解决了这个问题。至少我是这么想的。如果其他人有更好的想法,请张贴!

因此,我所做的就是从点云创建一个网格(如ofxKinect示例中所示),将其绘制到FBO中,并将其封装在着色碎片深度值的着色器周围。这样我就可以得到一个从0到1的颜色范围。

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

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

代码语言:javascript
复制
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中,我得到了一个无符号char数组,其值与kinect.getDepthPixels()函数相似,从0到255不等,但基于深度纹理,我现在得到了点云的深度数据。

这还没有得到充分的检验,但我认为这是朝着正确方向迈出的一步。我不太喜欢这个解决方案,但我希望它能帮助其他人,因为我一整天都在谷歌上疯狂,没有什么帮助。我可能会把事情弄得很复杂,但我们拭目以待。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17522592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档