gpt4 book ai didi

opencv - 从视频中的单应性中提取人脸旋转

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:24 33 4
gpt4 key购买 nike

我正在尝试确定视频中人脸的方向。

视频从面部的正面图像开始,因此没有旋转。在以下帧中,头部旋转,我试图确定旋转,这将引导我根据相机位置确定面部方向。

我正在使用 OpenCV 和 C++ 来完成这项工作。我正在使用 SURF 描述符来查找面部上的点,我用这些点来计算两个图像之间的单应性。由于两个帧彼此非常接近,头部旋转在该间隔内将最小,我的单应矩阵将接近单位矩阵。

这是我的单应矩阵:

H = findHomography(k1,k2,RANSAC,8);

其中 k1 和 k2 是使用 SURF 提取的关键点。

我正在使用 decomposeProjectionMatrix提取旋转矩阵,但现在我不确定如何解释 rotMatrix。这个基本上也是 (1 0 0; 0 1 0; 0 0 1)(其中 0 是从 e-10 到 e-16 范围内的数字)。

理论上,我试图做的是找到每一帧的旋转角度并将其存储在某处,这样如果我在每一帧中获得 1° 的变化,在 10 帧之后我知道我的头有将其方向改变了 10°。

我花了一些时间阅读我能找到的关于 QR 分解、单应矩阵等的所有内容,但我一直无法解决这个问题。因此,我们将不胜感激任何帮助。

谢谢!

最佳答案

单应矩阵的左上角2x2是一个二维旋转矩阵。如果您计算矩阵与一个点的乘积(即取 R*p),您会发现它等同于:

newX = oldVector dot firstRow
newY = oldVector dot secondRow

换句话说,矩阵的第一行是一个单位向量,它是新头部的x轴。 (如果帧之间存在比例差异,它将不是单位向量,但这种方法仍然有效。)所以你应该能够计算

rotation = atan2(second entry of first row, first entry of first row)

关于opencv - 从视频中的单应性中提取人脸旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239627/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com