将OpenCV stereorectify相机输出转换为three.js相机

时间:2016-12-16 17:59:25

标签: c++ opencv opengl-es three.js

我使用OpenCV的stereoCalibrate()校准了立体相机,并使用stereoRectify()对其进行了校正。这是成功的(相机的极线正确对齐,可以从相应的2D点左/右对获得精确的3D点位置。)

我现在正在尝试使用基于WebGL的three.js在与OpenCV相同的投影中显示相同的3D点。换句话说,如果我将经过校准和校正的2D图像从左侧相机覆盖到three.js输出上,则三个.js 3D点应该在视觉上与它们在OpenCV 2D图像上的位置对齐。这可以用于增强现实。

只需处理左相机(相机1):

stereoRectify()提供投影矩阵P1和整流变换R1。仅使用P1我可以将3D点转换为OpenCV中正确的2D屏幕位置。但是,我很难使用P1在three.js中获得等效的camera.projectionMatrix。

我正在使用OpenCV相机矩阵进行Guillaume Noctua here建议的OpenGL投影转换。我把相机矩阵作为P1的左上角3x3。这会产生一个看起来相似但不完全对齐的three.js摄像机视图(摄像机沿所有轴旋转大约一度左右,可能有一些其他小但明显错误的扭曲/翻译)。所以我错过了一些东西。我是否还需要以某种方式使用整流变换R1?我已经尝试将它用作旋转矩阵并按此量旋转three.js相机,但它没有改善。

有关使用OpenCV的P1和R1矩阵在three.js中制作等效相机视图的任何想法都将非常感激。

0 个答案:

没有答案