如何根据相机校准(C++)生成的真实数据使用opencv模拟失真?

Posted

技术标签:

【中文标题】如何根据相机校准(C++)生成的真实数据使用opencv模拟失真?【英文标题】:How to simulate distortion with opencv based on real data, generated by camera calibration (C++)? 【发布时间】:2013-05-23 14:56:49 【问题描述】:

我正在寻找一种在 C++ 中使用 OpenCV 创建(桶形)失真的方法,该方法基于相机校准生成的真实相机数据。 所以我的目标是用opencv模拟真实的镜头畸变。 因此我用 OpenCV 校准了一个相机。我只使用了第一个失真参数 k1:x' = x * k1*r² 通过这一步,我得到了一个 k1 = 0.129 的校准文件,即外在和内在的相机矩阵。

OpenCV 提供了一种校准图像的方法。而且我想“反转”这种方法,可以进行以下测试: 原图 -> undistort() -> 不失真图像 -> "distort()" -> 原图

是否可以否定k1因子或者是否有必要开发一个新的公式?

谢谢。

【问题讨论】:

【参考方案1】:

简短的回答,没有否定系数不会这样做。

但是,您可以测试反转系数,只要系数很小,您就会得到一个逆转换。该公式没有微不足道的逆,因此路径可能相当困难。

【讨论】:

以上是关于如何根据相机校准(C++)生成的真实数据使用opencv模拟失真?的主要内容,如果未能解决你的问题,请参考以下文章

使用校准相机从 4 点成像恢复平面

是否必须校准相机才能与 StereoBM 一起使用?

使用 OpenCV 2.3.1 和 C++ 校准单个相机

使用 MATLAB Camera Calibrator 进行单相机校准的问题

棋盘大小如何影响准确的相机校准?

相机校准和重新映射是不是会产生针孔相机模型?