Matx33d 点积在 OpenCV 中不起作用
Posted
技术标签:
【中文标题】Matx33d 点积在 OpenCV 中不起作用【英文标题】:Matx33d dot product not working in 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 位),所以我相信H
和Hinv
生成正确。
【问题讨论】:
【参考方案1】:“点积”!=“矩阵乘法”。事实上,cv::Matx33d::ddot ()
甚至不返回一个矩阵,而是一个标量。我还没有尝试过,但operator*
可能会按照您的意愿行事——就像这样:
cv::Matx33d HdHinv = H * Hinv;
【讨论】:
以上是关于Matx33d 点积在 OpenCV 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
VideoCapture 在 OpenCV 2.4.2 中不起作用
#include <opencv2/opencv.hpp> 在 VS 2013 中不起作用