矩阵的cvInvert()返回0矩阵?但是在Matlab中返回实际值

时间:2011-07-21 23:11:33

标签: opencv

这是我要反转的原始矩阵:

rows: 5
   cols: 5
   dt: f
   data: [ 927321., 1014163., 923303., 923303., 947641., 1014163.,
       1260101., 1062130., 1062130., 1102823., 923303., 1062130.,
       1004488., 1004488., 990651., 923303., 1062130., 1004488.,
       1004488., 990651., 947641., 1102823., 990651., 990651., 1116004. ]

并使用此行反转上述矩阵:

cvInvert(Mult, Inv, CV_LU);

反转后返回的矩阵是:

rows: 5
   cols: 5
   dt: f
   data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0. ]

并根据文件:

  

在LU方法的情况下,该函数返回src1行列式   (src1必须是正方形)。如果为0,则矩阵不反转并且src2   充满了零。

但奇怪的是,我要求我的朋友在Matlab中使用相同的矩阵做同样的事情并返回一个非零矩阵...这意味着行列式不是零..那么为什么opencv认为行列式是零?

由于

2 个答案:

答案 0 :(得分:1)

给定矩阵排名不足(行列式为零),因此无法计算其逆矩阵。

答案 1 :(得分:0)

根据在线矩阵逆变器,逆是:
0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000
0.000 0.000 68719476736.000 -68719476736.000 0.000
0.000 0.000 -68719476736.000 68719476736.000 0.000
0.000 0.000 0.000 0.000 0.000

这是一个非常奇怪的矩阵,其余的术语非常非常庞大。这意味着在线计算器存在问题,因为确定性是如此之大,因为大小或两者,您的例程会因确定性而溢出。我愿意打赌MatLab不会有这些类型的大小限制,因此它的有效值。