无法找出涉及设置旋转矩阵的逻辑错误

Can't Figure out Logic Error involving Setting Rotation Matrix

我正在尝试从我拥有的 3x4 姿势矩阵中提取 3x3 旋转矩阵。但是,即使我使用非常简单的代码将一个值设置为另一个值,两个值还是不同的。我正在用头撞墙,因为我不知道为什么会这样。这是代码:

std::cout << "Camera pose matrix from optical flow homography" << std::endl;
for (int e = 0; e < pose.rows; e++) {
    for (int f = 0; f < pose.cols; f++) {
        std::cout << pose.at<double>(e,f) << " " << e << " " << f;
        std::cout << "        ";
    }
    std::cout << "\n" << std::endl;
}

std::cout << "Creating rotation matrix" << std::endl;
Mat rotvec = Mat::eye(3, 3, CV_32FC1);
for (int s = 0; s < pose.rows; s++) {
    for (int g = 0; g < pose.cols-1; g++) {
        rotvec.at<double>(s, g) = pose.at<double>(s,g);
        std::cout << rotvec.at<double>(s,g) << " " << s << " " << g;
        std::cout << "        ";
    }
    std::cout << "\n" << std::endl;
}

std::cout << "Rotation matrix" << std::endl;
for (int e = 0; e < pose.rows; e++) {
    for (int f = 0; f < pose.cols-1; f++) {
        std::cout << rotvec.at<double>(e,f) << " " << e << " " << f;
        std::cout << "  ";
        std::cout << pose.at<double>(e,f) << " " << e << " " << f;
        std::cout << "         ";
    }
    std::cout << "\n" << std::endl;
}

这是输出:

Camera pose matrix from optical flow homography
5.26354e-315 0 0     0 0 1        0.0078125 0 2        0 0 3        

0.0078125 1 0        0 1 1        0 1 2                5.26354e-315 1 3        

0 2 0        5.26354e-315 2 1        1.97626e-323 2 2        7.64868e-309 2 3        

Creating rotation matrix
5.26354e-315 0 0        0 0 1              0.0078125 0 2        

0.0078125 1 0           0 1 1              0 1 2        

0 2 0             5.26354e-315 2 1         1.97626e-323 2 2        

Rotation matrix
5.26354e-315 0 0  5.26354e-315 0 0         0 0 1  0 0 1         5.26354e-315 0 2  0.0078125 0 2         

0.0078125 1 0  0.0078125 1 0         0 1 1  0 1 1         0.0078125 1 2  0 1 2         

0 2 0  0 2 0         5.26354e-315 2 1  5.26354e-315 2 1         1.97626e-323 2 2  1.97626e-323 2 2   

在这里你可以看到我正在尝试将姿势的前三列保存到 rotvec 矩阵中。当我实际将旋转矩阵设置为等于这三列的姿势时,我得到了正确的矩阵,因为第二个矩阵等于第一个矩阵的前三列。但是,当我再次检查旋转矩阵时,(第三矩阵)它与我在坐标 (0, 2) 和 (1, 2) 上需要的输出不同。 (我在姿势矩阵编号旁边输出了 rotvec 矩阵编号,您可以在这些坐标处看到数字不匹配)。我不确定为什么会这样,有人可以帮帮我吗?

为后来偶然发现此问题的其他人解决了我的问题:我只是将 Mat 类型更改为 CV_64F(使其成为双倍),用于 rotvec 和 pose,并全部用于显示。感谢 berak 为我指明了正确的方向。