有可能以不同的角度从kinect中得到深度像素吗?比如说kinect是从上面记录我的,我想获取深度像素,就像它从前面看到我一样?
我见过人们使用点云的例子,并且可以从这些数据中旋转创建的网格(从这些点),即使kinect是,比如说,从上面记录下来的人,仍然可以用这些点云旋转网格,就像从前面或脚下面看到的那样(这真的很酷!)
所以,也许我能从点云中创造出我自己的深度像素吗?任何指示都将不胜感激。
发布于 2013-07-08 14:47:40
好吧,我用一种很难看的方式解决了这个问题。至少我是这么想的。如果其他人有更好的想法,请张贴!
因此,我所做的就是从点云创建一个网格(如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中,我得到了一个无符号char数组,其值与kinect.getDepthPixels()函数相似,从0到255不等,但基于深度纹理,我现在得到了点云的深度数据。
这还没有得到充分的检验,但我认为这是朝着正确方向迈出的一步。我不太喜欢这个解决方案,但我希望它能帮助其他人,因为我一整天都在谷歌上疯狂,没有什么帮助。我可能会把事情弄得很复杂,但我们拭目以待。
https://stackoverflow.com/questions/17522592
复制相似问题