2

我使用 opencv 为 2 个摄像头(左侧的低分辨率摄像头和右侧的高分辨率摄像头)成功校准了内参和外参。我从 2 组图像(棋盘图案 - 每个相机大约 20 张图像)中进行了立体校准。我现在有一个 left.yml、right.yml 和一个 translationRotation.yml。现在我想扭曲/扭曲右图像,使其看起来与左图像相同(透视/扭曲/等)。我知道我有校准的所有数据,它只是知道如何使用正确的 opencv 函数来执行操作——例如。warpPerspective、重新映射或其他?

背景信息 - 我基本上是用高分辨率 rgb 摄像头(右)替换低分辨率 rgb 摄像头(左)。将 Openframeworks/c++ 与 ofxCv 一起使用。

谢谢。

4

1 回答 1

2

如果我理解正确,您在每台相机上都有不同的失真,并且您想对其中一个进行不失真并应用另一台相机的失真。对于不失真部分,这是我过去所做的。

使用OF,在设置中,您可以创建失真/不失真贴图,使用,这将为您提供两个对象cv::initUndistortRectifyMap形式的贴图。cv::Mat该函数从校准中接收相机矩阵和失真系数。

然后您可以使用cv::remap. 它将结果存储在其第二个参数中。

不失真后,您需要应用逆映射,以应用其他相机的失真。您提到的 warpPerspective 函数似乎可以很好地解决这个问题,但是可能可以从.yml您获得的文件中计算出映射。这只是应用相反映射的问题。

每当有必要确保您不会制作不必要的副本时,请使用ofxCV 的包装从 ofImage 切换到 Mat。

于 2013-11-21T13:35:59.277 回答