当相机之间的角度太大时,OpenCV 立体图像校正无法正常工作

2024-01-08

我想收集位于两个摄像机焦点处的身体的高度数据,这就是我的立体声设置的样子:

当我使用标准 cv2 函数计算图像的校正版本时,它看起来非常糟糕。当我对相机并行使用类似的设置时,它起作用了。

我计算了外线,它们似乎是正确的:

However, the resulting rectified images are not (below, the original images are above): enter image description here

这是我使用的代码,大部分是从 openCV 教程复制的

http://www.dmi.unict.it/~furnari/teaching/CV1617/lab1/ http://www.dmi.unict.it/~furnari/teaching/CV1617/lab1/

3d/2d 点和矩阵之前使用以下方法计算

cv2.calibrateCamera()

校准和校正过程

retval, _, _, _, _, R, T, E, F = cv2.stereoCalibrate(imager._3d_points, _2d_points_L,_2d_points_R, mtxL, distL, mtxR, distR, (img.shape[1], img.shape[0])

R1, R2, P1, P2, Q, _, _ = cv2.stereoRectify(mtxL, distL, mtxR, distR, (img.shape[1], img.shape[0]), R, T, )

map1_x, map1_y = cv2.initUndistortRectifyMap(imager.mtxL, imager.distL, R1, P1, (imLeft.shape[1], imLeft.shape[0]), cv2.CV_32FC1)
map2_x, map2_y = cv2.initUndistortRectifyMap(imager.mtxR, imager.distR, R2, P2, (imLeft.shape[1], imLeft.shape[0]), cv2.CV_32FC1)

imgL = cv2.remap(imLeft, map1_x, map1_y , cv2.INTER_CUBIC)
imgR = cv2.remap(imRight, map2_x, map2_y , cv2.INTER_CUBIC)

OpenCV 是否根本无法使用我的相机设置校正图像,或者我做错了什么?


据我所知,该函数stereoRectify假设相机轴彼此大致平行。你可以试试stereoRectifyUncalibrated,因为该函数依赖于基本矩阵计算并将处理这种情况。确保您已阅读文档 https://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#bool%20stereoRectifyUncalibrated(InputArray%20points1,%20InputArray%20points2,%20InputArray%20F,%20Size%20imgSize,%20OutputArray%20H1,%20OutputArray%20H2,%20double%20threshold):.

Note:

虽然该算法不需要知道相机的内在参数,但它在很大程度上取决于对极几何形状。因此,如果相机镜头有明显的畸变,最好在计算基本矩阵并调用该函数之前对其进行校正。例如,可以使用以下方法分别估计立体相机每个头的畸变系数:calibrateCamera()。然后,可以使用以下方法校正图像undistort(),或者仅可以校正点坐标undistortPoints().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当相机之间的角度太大时,OpenCV 立体图像校正无法正常工作 的相关文章

随机推荐

  • 按以 Number 开头的字符串排序 - ActiveRecord

    我正在构建 Rails 应用程序 并尝试按以数字开头的字符串列对数据库中的记录进行排序 我怎样才能先按号码订购 我宁愿按 SQL 顺序排序 也不愿按 ruby 方法排序 有什么办法吗 expected order 1 record1 2 r
  • 更新字典中多个键值对的性能

    我目前正在 python 中开发一个建模环境 它使用字典来共享连接部件的连接属性 我目前的做法大约需要程序总运行时间的 15 20 这对于几百万次迭代来说是相当多的 因此 我发现自己正在研究如何加快更新字典中的多个值并从字典中获取多个值 我
  • 是否可以在 iOS 7 或 iOS 8 模拟器中使用 NSUbiquitousKeyValueStore?

    我正在尝试测试一个使用 iCloud 键值存储的应用程序 一切都在物理设备上运行 但键值存储不会使用模拟器保存任何内容 据我了解根据本文档 https developer apple com library ios documentatio
  • android 9-patch 图形在图像视图中无法缩放

    I have
  • 如何使用 Rally Api 和 .NET 创建属于迭代的任务

    我是 Rally API 的新手 只是在使用 Rally RestApi 库创建任务时遇到一些问题 我需要创建一个任务 使用 NET 并将其与用户故事相关联 其中用户故事属于某个迭代 我是否必须先获取用户故事 然后向其中添加任务 我该怎么做
  • 如何使用 javascript 代码突出显示 JQM-DateBox 日历中的日期

    如何用两种不同的颜色突出显示日历中的单元格 即一些单元格为红色 其他单元格为绿色 使用JavaScript 一些代码 javascript 代码 单击按钮时显示日历 并且应该为日历设置日期 但事实并非如此
  • 通过 /dev/pts 在另一个终端中执行命令

    我有一个使用的终端STDIN 3 proc xxxx fd 0 gt dev pts 3 所以如果 在另一个终端 我这样做 echo do something command gt dev pts 3 该命令显示在我的第一个 pts 3 终
  • 用于更改安装项目的 ProductVersion 的预构建事件只有在构建之后才会生效

    我已按照描述的步骤操作here https stackoverflow com questions 306233 how to programatically change a projects product version使用预构建事件
  • 自动调整TableLayoutPanel的大小

    我有一个以编程方式创建的 TableLayoutPanel 它工作正常 但我找不到一些东西 如何在调整表单大小时使其自动调整列大小 面板设置为 Dock Top 当我调整表单大小而不是按百分比调整每列大小时 只有最后一列会增长 为此我能做什
  • DownloadString 给出了似乎在浏览器中工作的 https url 的超时

    我正在尝试将此 URL 中的内容获取到我的程序中 https data mtgox com api 2 BTCUSD money ticker https data mtgox com api 2 BTCUSD money ticker 在
  • 无法修复 Android Proguard 返回错误代码 1 错误

    当我尝试在我的 Android 应用程序中使用 proguard 时 只需添加 proguard config sdk dir tools proguard proguard android txt 对于我的 project propert
  • Pycharm 有交互式 Python 解释器吗?

    我是最近从其他 IDE 切换到的 Pycharm 新用户 我的一个问题是关于交互式 python 解释器 它是一个 窗口 我可以在运行脚本后输入变量来检查它们 Pyscripter 有一个叫做 Python 解释器 的东西 我知道 Pych
  • Gson自定义反序列化

    我正在使用 Gson 创建和解析 JSON 但我遇到了一个问题 在我的代码中我使用这个字段 Expose private ArrayList
  • 关闭 PDO 语句

    我最近决定从 MySQLi 跳到 PDO 但有一些关于 PDO 准备好的语句的问题困扰着我 在 MySQLi 中 我会编写一个典型的获取查询 如下所示 db new mysqli localhost user pass mydb sql S
  • getBoundingClientRect() 在 XUL 中返回零

    我的 Firefox 扩展有问题 我有一个 XUL 弹出面板 其中包含用于标签云的 hbox 以及用于将 div 添加到此 hbox 的 JS 代码
  • BigQuery 日期分区视图

    BigQuery 允许您创建日期分区表 https cloud google com bigquery docs creating partitioned tables https cloud google com bigquery doc
  • 在 Google 地图中使用 3D

    我想创建一个 web 应用程序 我可以在其中显示我自己的 geotiffs NDVI 和其他数据层以及 3D 几何图形 提供 2D 图块和纹理 3D 形状的无缝渲染 就像maps google com 在中实现的那样从 地图 视图切换到 地
  • 验证失败时重新填充单选按钮

    我有一个从数据库中提取数据的表单 如果它是一个输入框 代码可以正常工作 但我无法获取单选按钮的最新 POST 数据 这适用于输入文本框 我在第一次加载时获得从数据库中提取的默认值 并且我可以从用户在验证失败时修改输入框获得新的输入 如果有
  • 如何使用SAX PARSER解析android中的html内容

    xml中有描述标签 它包含 html 标签 我在android中使用SAX解析器来解析 但是 当它从描述标签获取数据时 它不会获取 html 内容 也不会获取任何标签 那么我如何解决使用 SAX 解析器从 XML 解析 html 内容的问题
  • 当相机之间的角度太大时,OpenCV 立体图像校正无法正常工作

    我想收集位于两个摄像机焦点处的身体的高度数据 这就是我的立体声设置的样子 当我使用标准 cv2 函数计算图像的校正版本时 它看起来非常糟糕 当我对相机并行使用类似的设置时 它起作用了 我计算了外线 它们似乎是正确的 However the