OpenNI通过OpenFrameworks显示骨架,但不显示用户掩码
OpenNI through OpenFrameworks shows skeleton but not user mask
这是我第一次使用OpenFrameworks。 我正在使用它来让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,但被读取为字符。因此,将用户掩码的像素保存到新数组中,但只保留四个条目中的一个就可以了。
基本上是这样的:
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
对象。
相关文章:
- 显示基于用户输入的整数的字符
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 我要求用户输入大小和数组,但是当我打印矢量时,它仅显示'0'作为输出
- 在数组中显示第一个元素用户输入
- 如何向用户显示特定错误,要求他/她使用循环再次提供输入?
- 运算符重载以显示用户定义的数据类型
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- C++ .我正在尝试通过使用开关内的数组来获取用户输入,但是当我运行代码时,它显示分段错误?
- boost::p rogram_options - 验证失败时,显示用户在错误消息中输入的值
- 程序,它接受用户输入的字符并按出现的降序显示它们
- 使用开关大小写语句抽取随机扑克牌等级和花色以显示用户
- 在单击QT中单击图像时,尝试立即显示用户编辑操作的结果
- 显示用户输入的平均数大于 50 和所有可被 3 整除的数字的乘积
- 如何使用C 随机显示用户输入字符串
- 需要帮助显示用户输入的整数的最小/最大值
- 我如何修改我的C 程序以显示用户输入的单词,并使用堆栈向后
- 如何显示用户花费的号码,即用户输入了多少时间
- OpenNI通过OpenFrameworks显示骨架,但不显示用户掩码
- 如何编写一个程序,显示用户输入值所花费的时间
- 显示用户创建的数组中的数字