一、基本坐标系
世界坐标系(Xw,Yw,Zw):自行定义,包括坐标原点,坐标系方向,坐标系单位
相机坐标系(Xc,Yc,Zc):相机坐标系(观察坐标系)相机坐标系的原点为相机的光心,x轴与y轴与图像的X,Y轴平行,z轴为相机光轴,它与图形平面垂直。光轴与图像平面的交点,即为图像坐标系的原点,构成的直角坐标系为相机坐标系
图像坐标系(X,Y):以主光轴和图像平面交点为坐标原点,单位为实际度量单位,如mm
像素坐标系(U,V):以图像的顶点为坐标原点,u和v方向平行于x和y方向,单位是像素
二、坐标转换关系
1.图像坐标系和像素坐标系的关系
其中dx和dy分别是像素代表的实际单位长度,它的单位可以是,mm/pixel
2.相机坐标系与世界坐标系之间的关系
R表示旋转矩阵,T表示平移向量,其中R是一个3*3的矩阵,世界坐标系和相机坐标系可以通过旋转和平移得到
3.相机坐标系与图像物理坐标系之间的关系
4.从世界坐标到图像像素坐标
其中的γ是扭曲因子,一般是0
三、opencv中的solvepnp函数
corners.push_back(selectpoint1[a]);
corners.push_back(selectpoint2[a]);
corners.push_back(selectpoint2[nsign[a]]);
corners.push_back(selectpoint1[nsign[a]]);
objectPoints.push_back((Point3f(-5.5, 2, 0)));//单位:cm
objectPoints.push_back((Point3f(-5.5, -2, 0)));
objectPoints.push_back((Point3f(5.5, -2, 0)));
objectPoints.push_back((Point3f(5.5, 2, 0)));
Mat cameraMatrix =(Mat_<double>(3,3)<<7.2122031590688607e+02, 0., 3.2821016647944805e+02, 0.,
7.2122031590688607e+02, 2.3588815689844478e+02, 0., 0., 1.);
Mat distCoeffs=(Mat_<double>(5,1) << -5.2223157893836514e-01, 3.6837912381470533e-01,
2.6732020462317304e-04, 9.4227382234429410e-04,
-1.9046620109170462e-01 );
Mat rvec, tvec;//rvec:旋转向量,tvec:平移向量
solvePnP(objectPoints, corners, cameraMatrix, distCoeffs, rvec, tvec);