当前位置: 首页 > news >正文

opencv 双目立体视觉

单目标定

1.先单目标定每个相机,获得单个相机内参,外参,畸变参数。

双目标定

2.然后双面标定

2.1 stereoCalibrate (标定函数):

double stereoCalibrate(InputArrayOfArrays objectPoints, //世界坐标系
InputArrayOfArrays imagePoints1, //左图像点
InputArrayOfArrays imagePoints2, //右图像点
InputOutputArray cameraMatrix1,
InputOutputArray distCoeffs1,
InputOutputArray cameraMatrix2,
InputOutputArray distCoeffs2,
Size imageSize,
OutputArray R, //旋转
OutputArray T, //平移
OutputArray E, //本征矩阵
OutputArray F, //基础矩阵
TermCriteria criteria =TermCriteria(TermCriteria::COUNT+
TermCriteria::EPS, 30, 1e-6), int flags=CALIB_FIX_INTRINSIC )

 输入参数: 标定板上标定点的世界坐标数组,左相机对应的相应的像素点坐标数组,右相机对应的像素点坐标数组,左相机内参,畸变参数,右相机内参,右相机畸变参数

输出:
OutputArray R, //输出第一和第二相机坐标系之间的旋转矩阵
OutputArray T, // 输出第一和第二相机坐标系之间的旋转矩阵平移向量
OutputArray E, //本征矩阵
OutputArray F, //基础矩阵

2.2 stereoRectify (双目矫正函数):对标定过的摄像机进行校正

    void stereoRectify(InputArray cameraMatrix1, InputArray distCoeffs1, InputArray cameraMatrix2, InputArray distCoeffs2, Size imageSize, InputArray R, InputArray T, OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q, int flags=CALIB_ZERO_DISPARITY, double alpha=-1, Size newImageSize=Size(), Rect* validPixROI1=0, Rect* validPixROI2=0 )

输入:
cameraMatrix1– 第一个相机矩阵.
distCoeffs1– 第一个相机畸变参数.
cameraMatrix2– 第二个相机矩阵.
distCoeffs2– 第二个相机畸变参数.
imageSize– 用于校正的图像大小.
R– 第一和第二相机坐标系之间的旋转矩阵。
T– 第一和第二相机坐标系之间的平移矩阵.
输出:
R1– 输出第一个相机的3x3矫正变换(旋转矩阵) .
R2– 输出第二个相机的3x3矫正变换(旋转矩阵) .
P1–在第一台相机的新的坐标系统(矫正过的)输出 3x4 的投影矩阵
P2–在第二台相机的新的坐标系统(矫正过的)输出 3x4 的投影矩阵
Q–输出深度视差映射矩阵,
flags– 操作的 flag可以是零或者是CV_CALIB_ZERO_DISPARITY . 如果设置了CV_CALIB_ZERO_DISPARITY,函数的作用是使每个相机的主点在校正后的图像上有相同的像素坐标。如果未设置标志,功能还可以改变图像在水平或垂直方向(取决于极线的方向)来最大化有用的图像区域。
alpha– 自由缩放参数。如果是-1或没有,该函数执行默认缩放。否则,该参数应在0和1之间。alpha=0,校正后的图像进行缩放和偏移,只有有效像素是可见的(校正后没有黑色区域)。alpha= 1意味着校正图像的抽取和转移,所有相机原始图像素像保留在校正后的图像(源图像像素没有丢失)。显然,任何中间值产生这两种极端情况之间的中间结果。
newImageSize– 校正后新的图像分辨率。相同的尺寸应传递给initUndistortRectifyMap()(见OpenCV样品目录stereo_calib.cpp样品)。当(0,0)传递(默认),它设置为原始图像大小。设置为较大的值能帮助你保存原始图像的细节,特别是当有一个大的径向畸变时。
validPixROI1– 校正后的图像可选的输出矩形,里面所有像素都是有效的。如果alpha= 0,ROIs覆盖整个图像。否则,他们可能会比较小。
validPixROI2– 校正后的图像可选的输出矩形,里面所有像素都是有效的。如果alpha= 0,ROIs覆盖整个图像。否则,他们可能会比较小

2.3 initUndistortRectifyMap:计算摄像机校正映射

    void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs,InputArray R, InputArray newCameraMatrix,Size size, int m1type, OutputArray map1, OutputArray map2 );

函数功能:计算无畸变和修正转换映射。
参数说明:
cameraMatrix:输入相机矩阵
distCoeffs:输入参数,相机的畸变系数:,有4,5,8,12或14个元素。如果这个向量是空的,就认为是零畸变系数。
R:可选的修正变换矩阵,是个3*3的矩阵。通过stereoRectify计算得来的R1或R2可以放在这里。如果这个矩阵是空的,就假设为单位矩阵。在cvInitUndistortMap中,R被认为是单位矩阵。
newCameraMatrix:新的相机矩阵,通过stereoRectify计算得来的P1或P2可以放在这里
size:未畸变的图像尺寸。
m1type:第一个输出的映射的类型,可以为 CV_32FC1, CV_32FC2或CV_16SC2,参见cv::convertMaps。
map1:第一个输出映射。
map2:第二个输出映射。

2.4 remap:把一幅图像中某位置的像素放置到另一幅图像指定位置的过程

void remap( InputArray src, //输入图像
OutputArray dst, //输出图像
InputArray map1,//第一个映射
InputArray map2, //第二个映射
int interpolation, //插值
intborderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar()
)

双目标定例子

std::ofstream fout(cal_dir + "calibration_result.txt");
std::vector<cv::Point3f> worldpoint;
std::vector<std::vector<cv::Point3f>> worldpoints;
for(int i = 0;i < Boardsize.height;i++)
{for(int j 
http://www.lryc.cn/news/190822.html

相关文章:

  • 如何将jpg转化为png?
  • 查看 SSH 登录失败日志
  • 竞赛选题 深度学习+opencv+python实现车道线检测 - 自动驾驶
  • MR混合现实模拟消防安全演练场景实训
  • geecg-uniapp 同源策略 数据请求 获取后台数据 进行页面渲染 ui库安装 冲突解决(3)
  • Krypton控件组使用之KryptonRibbon
  • 低压配电系统中浪涌保护器的作用,安装位置和接线方法
  • OpenCV实现答题卡自动打分!
  • Python编程必备:掌握列表遍历的6种神级技巧!
  • nodejs+vue校园失物招领平台
  • leetcode做题笔记171. Excel 表列序号
  • SW曲面实体导出工程图
  • Docker的私有仓库部署——Harbor
  • JavaScript反爬虫技巧详细攻略
  • C++基础入门学习笔记
  • 手机cpu架构查看及armeabi、armeabi-v7a、arm64-v8a及x86等说明
  • node-sass报错,node16运行node14的项目
  • 在Linux中掌握不同的命令,让创建文件变得易如反掌
  • iOS 14 YYAnimatedImageView加载图片失败处理
  • 兴趣社如何搭建一个兴趣社区?
  • 腾讯wifi码推广如何代理?方法详解!
  • linux下读取socket相关的系统调用总结
  • kafka生产者发送消息报错 Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected
  • 内存文件初始化
  • 【`opencv_core` 和 `opencv_imgcodecs` 是 OpenCV(开源计算机视觉库)的两个主要模块】
  • 系统架构师备考倒计时24天(每日知识点)
  • 多无人机编队集群飞行
  • 【C++杂货铺】一文带你走进哈希:哈希冲突 | 哈希函数 | 闭散列 | 开散列
  • docker 搭建本地Chat GPT
  • 电脑怎么剪辑视频?高手分享的独家秘诀