将OpenCV摄像机视图矩阵转换为WebGL(THREE.js)摄像机视图矩阵

看看link,OpenCV与OpenGL或WebGL之间的主要区别是:

  • 在OpenGL中正y向上,在OpenCV中正y
  • 正z在OpenGL中向后,在OpenCV中向前
  • 正角度在OpenGL中为逆时针,在openCV中为顺时针。因此,x角取反,而y和z角双重取反(不变)
  • y和z位置取反

这是我的步骤:

if (cmd.ExecuteNonQuery() != DBNull.Value)
{
    MessageBox.Show("OK!");
}
else
{
    MessageBox.Show("Failed!");
}

这似乎是朝正确方向迈出的一步,因为位置似乎正确。但是,对象面对的方向(在图像中用红色线框框出)是翻转的。绿色箭头应该指向相反的方向。

我认为这与此有关:

let opencvViewMatrix = new THREE.Matrix4();
let webglViewMatrix = new THREE.Matrix4();
let webglTransformMatrix = new THREE.Matrix4();
let transferMatrix = new THREE.Matrix4();



/* Create opencvViewMatrix from data */
opencvViewMatrix.set(
    data[0][0],data[0][1],data[0][2],data[0][3],data[1][0],data[1][1],data[1][2],data[1][3],data[2][0],data[2][1],data[2][2],data[2][3],data[3][0],data[3][1],data[3][2],data[3][3],); 


/* Fixing the y and z axis issue */

transferMatrix.set(
  1,-1,1,);

webglViewMatrix = opencvViewMatrix.multiply(transferMatrix);


/* To get the cameras transform matrix we need the inverse of the view matrix*/
webglTransformMatrix.getInverse(webglViewMatrix);


// lets get the position vector from the matrix
let t = new THREE.Vector3().setfromMatrixPosition(webglTransformMatrix);

// lets get the rotation vector from the matrix
let r = new THREE.Euler();.setfromRotationmatrix(webglTransformMatrix);


...
...

但是,我不太确定如何进行。任何帮助将不胜感激。

将OpenCV摄像机视图矩阵转换为WebGL(THREE.js)摄像机视图矩阵

cobol_12121 回答:将OpenCV摄像机视图矩阵转换为WebGL(THREE.js)摄像机视图矩阵

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3124225.html

大家都在问