C++ OpenNI通过OpenFrameworks显示骨架,但不显示用户掩码

C++ OpenNI通过OpenFrameworks显示骨架,但不显示用户掩码,c++,openni,openframeworks,nite,C++,Openni,Openframeworks,Nite,这是我第一次使用OpenFramework。我用它来获取OpenCV的光流,它与来自OpenNI的用户掩码一起工作。所以我不需要骨架。我需要的是OpenNI的用户掩码 我使用的是OpenNI版本1.5.4.0和NITE版本1.5.2.21,我使用的是Ubuntu Trusty 除了一个:我看不到用户掩码之外,大多数部件都工作正常。本机OpenNI示例有效:我可以在其中看到用户轮廓。但从OpenFrameworks,我似乎无法获得用户掩码 对于OpenFrameworks代码中的每个用户,我可以这

这是我第一次使用OpenFramework。我用它来获取OpenCV的光流,它与来自OpenNI的用户掩码一起工作。所以我不需要骨架。我需要的是OpenNI的用户掩码

我使用的是OpenNI版本1.5.4.0和NITE版本1.5.2.21,我使用的是Ubuntu Trusty

除了一个:我看不到用户掩码之外,大多数部件都工作正常。本机OpenNI示例有效:我可以在其中看到用户轮廓。但从OpenFrameworks,我似乎无法获得用户掩码

对于OpenFrameworks代码中的每个用户,我可以这样做:

// "user" is an object returned from ofxOpenNI::getTrackedUser

// This actually displays a skeleton:
user.drawSkeleton();
// These two do nothing:
user.drawMask();
user.drawPointCloud();
我认为OpenNI设备的调试视图也是如此:

// openNiDevice is an instance of ofxOpenNI
openNiDevice.drawDebug();
这显示了带有骨架的RGB摄影机和深度摄影机,但我认为它没有显示用户遮罩。这并不十分清楚,因为用户大纲可能会被误认为是同质深度阅读,但我认为情况并非如此。我认为即使在调试屏幕中,用户掩码的颜色也会与深度颜色不同

我在绘图时在屏幕上打印用户数,我可以看出ofxOpenNI确实检测到了用户。而且,它确实显示了骨骼,所以它一定看到了什么

同样,OpenNI示例应用程序sample NiUserTracker确实给了我一个完美的轮廓,所以OpenNI一定在工作


我做错了什么?

我知道了。在用户掩码代码中的某个地方,数字保存为int,但读取为char。因此,将用户掩码的像素保存到一个新数组中,但只保留四个条目中的一个就成功了

基本上:

const unsigned char * userPix = user.getMaskPixels().getPixels();
int dataSize = user.getMaskPixels().getWidth() * user.getMaskPixels().getHeight() * 4;
unsigned char goodGray[dataSize / 4];
for (int i = 0; i < dataSize; i += 4) {
  goodGray[i / 4] = userPix[i];
}
goodGray现在包含适当的像素,可用于制作ofImage对象