设计交流的网站,龙岗做棋牌网站建设,大数据营销方法,重庆做营销型网站公司操作系统#xff1a;ubuntu22.04 OpenCV版本#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言#xff1a;C11
算法描述
cv::fisheye::stereoRectify 是 OpenCV 中用于鱼眼镜头立体校正的函数。该函数计算两个相机之间的校正变换#xff0c;使得从两个相机拍摄的图像… 操作系统ubuntu22.04 OpenCV版本OpenCV4.9 IDE:Visual Studio Code 编程语言C11
算法描述
cv::fisheye::stereoRectify 是 OpenCV 中用于鱼眼镜头立体校正的函数。该函数计算两个相机之间的校正变换使得从两个相机拍摄的图像中的对应点在行上对齐。这一步骤对于后续的立体匹配和深度估计非常重要。
函数原型
void cv::fisheye::stereoRectify
(InputArray K1,InputArray D1,InputArray K2,InputArray D2,const Size imageSize,InputArray R,InputArray tvec,OutputArray R1,OutputArray R2,OutputArray P1,OutputArray P2,OutputArray Q,int flags,const Size newImageSize Size(),double balance 0.0,double fov_scale 1.0
) 参数
参数K1: 第一个相机的内参矩阵。参数D1: 第一个相机的畸变参数。参数K2: 第二个相机的内参矩阵。参数D2: 第二个相机的畸变参数。参数imageSize: 用于立体标定的图像尺寸。参数R: 第一和第二个相机坐标系之间的旋转矩阵。参数tvec: 相机坐标系之间的平移向量。参数R1: 输出第一个相机的3x3校正变换旋转矩阵。参数R2: 输出第二个相机的3x3校正变换旋转矩阵。参数P1: 在新的校正后的坐标系统中输出第一个相机的3x4投影矩阵。参数P2: 在新的校正后的坐标系统中输出第二个相机的3x4投影矩阵。参数Q: 输出4×4的视差到深度映射矩阵见 reprojectImageTo3D 函数。参数flags: 操作标志可以是0或 fisheye::CALIB_ZERO_DISPARITY。如果设置了该标志函数将使每个相机的主点在校正后的视图中具有相同的像素坐标。如果没有设置该标志函数可能仍然会在水平或垂直方向上移动图像取决于极线的方向以最大化有用的图像区域。参数newImageSize: 校正后的新图像分辨率。应将相同的大小传递给 initUndistortRectifyMap参见OpenCV示例目录中的 stereo_calib.cpp。当传递 (0,0) 时默认值它被设置为原始的 imageSize。将其设置为更大的值可以帮助你保留原始图像中的细节特别是在存在较大径向畸变的情况下。参数balance: 设置新的焦距范围在最小焦距和最大焦距之间。平衡值在 [0, 1] 范围内。参数fov_scale: 新焦距的除数。
代码示例 #include opencv2/opencv.hpp
#include iostreamint main() {// 相机内参矩阵 K1 和 K2cv::Mat K1 (cv::Mat_double(3, 3) 458.654, 0, 367.215, 0, 457.296, 248.375, 0, 0, 1);cv::Mat K2 (cv::Mat_double(3, 3) 458.654, 0, 367.215, 0, 457.296, 248.375, 0, 0, 1);// 畸变系数 D1 和 D2cv::Mat D1 (cv::Mat_double(1, 4) 0.0695303, -0.160713, -0.00480225, 0.000911994);cv::Mat D2 (cv::Mat_double(1, 4) 0.0695303, -0.160713, -0.00480225, 0.000911994);// 图像尺寸cv::Size imageSize(720, 576);// 旋转矩阵 R 和平移向量 tveccv::Mat R (cv::Mat_double(3, 3) 1, 0, 0, 0, 1, 0, 0, 0, 1); // 示例数据cv::Mat tvec (cv::Mat_double(3, 1) 0.1, 0.05, 0.02); // 示例数据// 输出的校正旋转矩阵cv::Mat R1, R2;// 输出的投影矩阵cv::Mat P1, P2;// 输出的重投影矩阵cv::Mat Q;// 进行立体校正cv::fisheye::stereoRectify(K1, D1, K2, D2,imageSize, R, tvec,R1, R2, P1, P2, Q,cv::CALIB_ZERO_DISPARITY,imageSize, 0.0, 1.0);// 打印结果std::cout R1: std::endl R1 std::endl;std::cout R2: std::endl R2 std::endl;std::cout P1: std::endl P1 std::endl;std::cout P2: std::endl P2 std::endl;std::cout Q: std::endl Q std::endl;return 0;
}运行结果
R1:
[0.8804509063256238, 0.4402254531628119, 0.1760901812651247;-0.4402254531628119, 0.8969404364876068, -0.04122382540495731;-0.1760901812651247, -0.04122382540495731, 0.9835104698380172]
R2:
[0.8804509063256238, 0.4402254531628119, 0.1760901812651247;-0.4402254531628119, 0.8969404364876068, -0.04122382540495731;-0.1760901812651247, -0.04122382540495731, 0.9835104698380172]
P1:
[463.3157037596288, 0, 216.7917896240862, 0;0, 463.3157037596288, 262.3111277744742, 0;0, 0, 1, 0]
P2:
[463.3157037596288, 0, 216.7917896240862, 52.62254833641767;0, 463.3157037596288, 262.3111277744742, 0;0, 0, 1, 0]
Q:
[1, 0, 0, -216.7917896240862;0, 1, 0, -262.3111277744742;0, 0, 0, 463.3157037596288;0, 0, -8.804509063256239, 0]