这段代码取自名为NiUserTracker的OpenNI样本
//... some codes...
#define XN_CALIBRATION_FILE_NAME "UserCalibration.bin"
// Save calibration to file
void SaveCalibration()
{
XnUserID aUserIDs[20] = {0};
XnUInt16 nUsers = 20;
g_UserGenerator.GetUsers(aUserIDs, nUsers);
for (int i = 0; i < nUsers; ++i)
{
// Find a user who is already calibrated
if (g_UserGenerator.GetSkeletonCap().IsCalibrated(aUserIDs[i]))
{
// Save user's calibration to file
g_UserGenerator.GetSkeletonCap().SaveCalibrationDataToFile(aUserIDs[i], XN_CALIBRATION_FILE_NAME);
break;
}
}
}
//... some codes ...
//... some codes ...
void glutKeyboard (unsigned char key, int x, int y)
{
switch (key)
{
case 27:
CleanupExit();
//... some codes...
case 'S':
SaveCalibration();
break;
case 'L':
LoadCalibration();
break;
}
}
当我按Shift + s或S(打开大写锁定)时,它不会生成“UserCalibration.bin”。我完全搜索了我的硬盘,没有找到这样的文件。之后,我从OpenNI文件夹中禁用“只读”属性。 当我执行NiUserTracker.exe时,控制台不会报告任何错误。
我最满意的是在线校准,这需要花一点时间进行校准,我认为通过加载用户校准的文件可以更快地完成此过程。
有些人可能指出我正确的方向,为什么我无法生成这个“UserCalibration.bin”文件?我使用64位OpenNI的Win7 64位和Visual Studio 2010 Ultimate(由我们大学提供用于研究目的)。
非常感谢。
此致 ikel
答案 0 :(得分:1)
我刚刚用两种不同的配置进行了快速测试:
它看起来不像是权限问题。我稍微修改了SaveCalibration函数:
// Save calibration to file
void SaveCalibration()
{
XnUserID aUserIDs[20] = {0};
XnUInt16 nUsers = 20;
g_UserGenerator.GetUsers(aUserIDs, nUsers);
for (int i = 0; i < nUsers; ++i)
{
// Find a user who is already calibrated
if (g_UserGenerator.GetSkeletonCap().IsCalibrated(aUserIDs[i]))
{
// Save user's calibration to file
XnStatus saveStatus = g_UserGenerator.GetSkeletonCap().SaveCalibrationDataToFile(aUserIDs[i], XN_CALIBRATION_FILE_NAME);
std::cout << "saveStatus: " << saveStatus << std::endl;
if(saveStatus == XN_STATUS_OK) std::cout << "calibration saved to file" << std::endl;
if(saveStatus == XN_STATUS_NOT_IMPLEMENTED) std::cout << "not implemented, calibration wasn't saved" << std::endl;
break;
}
}
}
我在osx上有STATUS_OK,但在Windows上有XN_STATUS_NOT_IMPLEMENTED(值65550)。我找到了interesting post on the OpenNI group。我不是百分百肯定,但听起来像 SaveCalibrationDataToFile可能在较新版本中已弃用。这有点意义,因为校准不再需要psi(Ψ)姿势。
尝试恢复旧版本。我在osx上使用的OpenNI配置工作(保存校准文件,但此版本也可以跟踪骨架而不需要psi(Ψ)姿势)。
HTH