如何从 OpenCV rvecs 计算旋转角度
How to calculate the rotated angle from OpenCV rvecs
我正在使用 aruco 标记来获取机器人的位置。从 estimatePoseSingleMarkers 获取姿势后,我获得了给定标记的 rvecs 和 tvecs。由此我如何获得标记关于每个轴的旋转角度。
我使用下面的代码来检测和绘制 aruco 标记及其轴
while(true)
{
vector< vector<Point2f>> corners; //All the Marker corners
vector<int> ids;
cap >> frame;
cvtColor(frame, gray, CV_BGR2GRAY);
aruco::detectMarkers(gray, dictionary, corners, ids);
aruco::drawDetectedMarkers(frame,corners,ids);
aruco::estimatePoseSingleMarkers(corners, arucoMarkerLength, cameraMatrix, distanceCoefficients, rvecs, tvecs);
for(int i = 0; i < ids.size(); i++)
{
aruco::drawAxis(frame, cameraMatrix, distanceCoefficients, rvecs[i], tvecs[i], 0.1f);
}
imshow("Markers", frame);
int key = waitKey(10);
if((char)key == 'q')
break;
}
标记相对于相机的旋转是通过首先从旋转向量(rvec) 中获取旋转矩阵,然后通过获取欧拉角获得的。
Converting Rotation matrix to Eurler angles are given here
我正在使用 aruco 标记来获取机器人的位置。从 estimatePoseSingleMarkers 获取姿势后,我获得了给定标记的 rvecs 和 tvecs。由此我如何获得标记关于每个轴的旋转角度。
我使用下面的代码来检测和绘制 aruco 标记及其轴
while(true)
{
vector< vector<Point2f>> corners; //All the Marker corners
vector<int> ids;
cap >> frame;
cvtColor(frame, gray, CV_BGR2GRAY);
aruco::detectMarkers(gray, dictionary, corners, ids);
aruco::drawDetectedMarkers(frame,corners,ids);
aruco::estimatePoseSingleMarkers(corners, arucoMarkerLength, cameraMatrix, distanceCoefficients, rvecs, tvecs);
for(int i = 0; i < ids.size(); i++)
{
aruco::drawAxis(frame, cameraMatrix, distanceCoefficients, rvecs[i], tvecs[i], 0.1f);
}
imshow("Markers", frame);
int key = waitKey(10);
if((char)key == 'q')
break;
}
标记相对于相机的旋转是通过首先从旋转向量(rvec) 中获取旋转矩阵,然后通过获取欧拉角获得的。 Converting Rotation matrix to Eurler angles are given here