Yer*_*aze 11 c++ opencv computer-vision
我用OpenCV(findChessboard等)校准了我的相机,所以我有: - 相机失真系数和内在矩阵 - 相机姿势信息(平移和旋转,通过其他方式分开计算)作为欧拉角和相机框架内的4x4 - 2D点
如何将这些2D点转换为指向世界的3D单位向量?我尝试使用cv :: undistortPoints但似乎没有这样做(只返回2D重映射点),我不确定使用什么方法的矩阵数学来通过我内置的Camera内在函数来建模相机.
Ham*_*mer 17
将您的2d点转换为同质点(给它一个等于1的第三个坐标),然后乘以相机内在函数矩阵的倒数.例如
cv::Matx31f hom_pt(point_in_image.x, point_in_image.y, 1);
hom_pt = camera_intrinsics_mat.inv()*hom_pt; //put in world coordinates
cv::Point3f origin(0,0,0);
cv::Point3f direction(hom_pt(0),hom_pt(1),hom_pt(2));
//To get a unit vector, direction just needs to be normalized
direction *= 1/cv::norm(direction);
Run Code Online (Sandbox Code Playgroud)
原点和方向现在定义与该图像点对应的世界空间中的光线.请注意,此处原点位于相机的中心,您可以使用相机姿势转换为不同的原点.失真系数从您的实际相机映射到针孔相机模型,应该在最开始时使用以找到您的实际2d坐标.然后是步骤
| 归档时间: |
|
| 查看次数: |
10058 次 |
| 最近记录: |