c++ - C++ 中的 Kinect 缩放

标签 c++ kinect

我正在尝试使用 kinect,但是我在缩放方面遇到了一些问题。下面是来自 kinect-kcb 的代码,虽然面部跟踪适用于“网格”,但我在返回我自己的类的缩放值时遇到问题。下面的代码返回一个正确的旋转和平移,功能完美,但比例在很长一段时间内只返回 1(尽管网格明显改变大小)然后慢慢变小 0.98 ...等等,但显然不正确的比例值。

float scale;
float rotation[ 3 ];
float translation[ 3 ];
hr = mResult->Get3DPose( &scale, rotation, translation );
if ( SUCCEEDED( hr ) ) {
    Vec3f r( rotation[ 0 ], rotation[ 1 ], rotation[ 2 ] );
    Vec3f t( translation[ 0 ], translation[ 1 ], translation[ 2 ] );

    face.mPoseMatrix.translate( t );
    face.mPoseMatrix.rotate( r );
    face.mPoseMatrix.translate( -t );
    face.mPoseMatrix.translate( t );
    face.mPoseMatrix.scale( Vec3f::one() * scale );
}

这个比例值在整个代码中重复使用,但似乎没有经常改变(示例函数 - 不按顺序):

hr = mModel->Get3DShape( shapeUnits, numShapeUnits, animationUnits, numAnimationUnits, scale, rotation, translation, pts, numVertices );

hr = mModel->GetProjectedShape( &mConfigColor, mSensorData.ZoomFactor, viewOffset, shapeUnits, numShapeUnits, animationUnits, 
                            numAnimationUnits, scale, rotation, translation, pts, numVertices );

kinect 有一个函数 FaceModel.Scale(),但是它只返回一个常量值,我假设它是 3D 模型的初始缩放值,然后我假设上面的缩放值会随着用户靠近和移动而改变远离相机。

最佳答案

方法IFTResult::Get3DPose除其他事项外,还为您提供面值。如果它等于 1.0,则面部比例等于加载的 3D 模型(所以无事可做?)。

如果重新加载 3d 模型时,面值不等于 1.0,则需要对模型进行处理。

您是否尝试输出一些 IFTResult::Get3DPose 分配给 pScale 的调试信息?

也有可能是系统追踪失败,可以用IFTResult::GetStatus查看.

可能你追求的是face rectangle的量级.这将随着图像主题的接近度而缩放。

Heres相关代码项目链接。

关于c++ - C++ 中的 Kinect 缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26736801/

相关文章:

android - 在 Android Studio 中用 C++ 编写应用程序?

c# - BodyFrameReader.AcquireLatestFrame 总是返回 null

c++访问冲突写入位置0x00000000

c++ - "Lifetime"限制是在 C++ 中实现的吗?

c# - unity中Kinect未检测到玩家时触发什么事件

kinect - 让 children 编程 Microsoft Kinect 的可行性如何?

algorithm - Kinect 骨骼关节静态姿势识别的最佳算法是什么?

c# - 如何将信息从 Kinect 发送到 Arduino?

c++ - 如何让 gcc 为所有符号名称添加前缀

c++ - 非成员、非静态变量和方法的范围