为什么我的相机矩阵是一个单位矩阵后校准

Why my camera matrix is an identity matrix after calibration

本文关键字:单位 一个 相机 我的 为什么      更新时间:2023-10-16

使用OpenCV中的一些样本数据校准我的相机后,我的相机矩阵变成了单位矩阵。
下面是我的代码:

std::vector<cv::Point3f> t_3d;
t_3d.push_back(cv::Point3f(50, 100, 0));
t_3d.push_back(cv::Point3f(375, 100, 0));
t_3d.push_back(cv::Point3f(50, 1600, 0));
t_3d.push_back(cv::Point3f(750, 1600, 0));
object_points.push_back(t_3d);
std::vector<cv::Point2f> t_2d;
t_2d.push_back(cv::Point2f(2.27556, 98.9867));
t_2d.push_back(cv::Point2f(631.467, 58.0267));
t_2d.push_back(cv::Point2f(207.076, 1020.59));
t_2d.push_back(cv::Point2f(1061.55, 969.387));
image_points.push_back(t_2d);
cv::calibrateCamera(object_points, image_points, cv::Size(1440, 900), cam_mat,
                    dist_coeffs, rvecs, tvecs, CV_CALIB_USE_INTRINSIC_GUESS);

此行为是否正常?

根据文档,您需要至少预先初始化相机矩阵的一部分。

From the docs:

如果指定了CV_CALIB_USE_INTRINSIC_GUESS和/或CV_CALIB_FIX_ASPECT_RATIO,则必须在调用函数之前初始化fx, fy, cx, cy的部分或全部。

CV_CALIB_USE_INTRINSIC_GUESS cameraMatrix包含fx, fy, cx, cy的有效初始值,这些值会进一步优化。否则,(cx, cy)初始设置为图像中心(使用imageSize),焦距以最小二乘方式计算。

在您的情况下,因为您没有将cam_mat设置为任何值,我相信c_x和c_y被设置为图像中心(大概是(0,0)),焦距f_x和f_y是1,因为您使用CV_CALIB_USE_INTRINSIC_GUESS。

相关文章: