Eigen::Matrix3d rotation;
cv::Vec3d theta(1, 2, 3);
cv::Mat R_x = (cv::Mat_<double>(3,3) << 1, 0, 0, 0, cos(theta[0]), -sin(theta[0]), 0, sin(theta[0]), cos(theta[0]) );
cv::Mat R_y = (cv::Mat_<double>(3,3) << cos(theta[1]), 0, sin(theta[1]), 0, 1, 0, -sin(theta[1]), 0, cos(theta[1]) );
cv::Mat R_z = (cv::Mat_<double>(3,3) << cos(theta[2]), -sin(theta[2]), 0, sin(theta[2]), cos(theta[2]), 0, 0, 0, 1);
cv::Mat R = R_z * R_y * R_x;
cv2eigen(R, rotation);
cout << rotation << endl;
Eigen::Vector3d eular_angle(1, 2, 3);
rotation = Eigen::AngleAxisd(eular_angle[2], Eigen::Vector3d::UnitZ())
* Eigen::AngleAxisd(eular_angle[1], Eigen::Vector3d::UnitY())
* Eigen::AngleAxisd(eular_angle[0], Eigen::Vector3d::UnitX());
cout << rotation << endl;
以上分别使用了cv::Mat 和 Eigen实现了欧拉角转旋转矩阵
两个最后输出是完全相同的