【问题标题】:Matx33d dot product not working in OpenCVMatx33d 点积在 OpenCV 中不起作用
【发布时间】:2016-02-13 18:08:32
【问题描述】:

我的print函数定义为:

void print(std::string matname, cv::Matx33d A) {
    fprintf(stdout, "%s = [\n", matname.c_str());
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < 3; j++) {
            fprintf(stdout, "%15.10lf", A(i,j));
        }   
        fprintf(stdout, "\n");
    }   
    fprintf(stdout, "];\n");
}

我设计了一个矩阵H,并在下面的代码中使用它:

print("H", H); 
cv::Matx33d Hinv = H.inv();
print("H^-1", Hinv);

cv::Matx33d HdHinv(H.ddot(Hinv));
print("H*H^-1", HdHinv);

cv::Matx33d HinvdH(Hinv.ddot(H));
print("H^-1*H", HinvdH);

但是,输出如下:

H = [
   0.0386192492   0.1756336675   0.0245675072
   0.1756336675   1.3649487597  -0.2727645303
   0.0245675072  -0.2727645303  -0.5635269575
];
H^-1 = [
  45.9140372920  -5.0221718200   4.4325541956
  -5.0221718200   1.2173491959  -0.8081812555
   4.4325541956  -0.8081812555  -1.1901116767
];
H*H^-1 = [
   3.0000000000   0.0000000000   0.0000000000
   0.0000000000   0.0000000000   0.0000000000
   0.0000000000   0.0000000000   0.0000000000
];
H^-1*H = [
   3.0000000000   0.0000000000   0.0000000000
   0.0000000000   0.0000000000   0.0000000000
   0.0000000000   0.0000000000   0.0000000000
];

倒数似乎工作正常,但为什么我从点积中得到这些值?我是否错误地使用了ddot?我在Matlab 中测试了这个点积,我得到了单位矩阵(精确到小数点后10 位),所以我相信HHinv 生成正确。

【问题讨论】:

    标签: c++ opencv dot-product


    【解决方案1】:

    “点积”!=“矩阵乘法”。事实上,cv::Matx33d::ddot () 甚至不返回一个矩阵,而是一个标量。我还没有尝试过,但operator* 可能会按照您的意愿行事——就像这样:

    cv::Matx33d HdHinv = H * Hinv;
    

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 2020-06-22
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2015-09-18
      • 2020-12-14
      • 1970-01-01
      相关资源
      最近更新 更多