gpt4 book ai didi

c++ - 逆矩阵 OpenCV。 Matrix.inv() 无法正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:09 24 4
gpt4 key购买 nike

我有一个问题,我找不到任何解决方案。

我必须用一个已知矩阵的逆矩阵进行一些计算。

Matrix homography=

1.1688, 0.23, 62.2,

-0.013,1.225, -6.29,

0, 0, 1,

然后:

Mat homoInv=homography.inv();

矩阵的内容是:

1.81381e-29, 15.1628, -7.57361e+17, 

0, -0, 0,

5.4561e-33, -2.40123e+34, -1.38198e-05

这当然是错误的,因为我已经在 Matlab 中检查了结果。两个矩阵都作为 float 显示和读取,它们的深度为 64FC1

有人知道可以做什么吗?

谢谢大家

更多代码:

int main(int argc, char ** argv )
{
Mat homogra(3,3,CV_64FC1);
Mat coord(3,1,CV_64FC1);
Mat result(target.size(),CV_8UC1);
homogra.at<float>(0,0)=1.1688;
homogra.at<float>(0,1)=0.23;
homogra.at<float>(0,2)=(-62.20);
homogra.at<float>(1,0)=(-0.013);
homogra.at<float>(1,1)=1.225;
homogra.at<float>(1,2)=-6.29;
homogra.at<float>(2,0)=0;
homogra.at<float>(2,1)=0;
homogra.at<float>(2,2)=1;
printMatrix(homogra);

Mat inverse=homogra.inv();
printMatrix(inverse);
}

函数打印矩阵:

void printMatrix(Mat M){
cout<<"Tipo de matriz:"<<M.type()<<endl;
// dont print empty matrices
if (M.empty()){
cout << "---" << endl;
return;
}
// loop through columns and rows of the matrix
for(int i=0; i < M.rows; i++){
for(int j=0; j < M.cols ; j++){
cout << M.at<float>(i,j) << ", "<<endl;
}
cout<<"Change\n"<<endl;
}
}

但错误不在 printMatrix 中,因为如果我分别打印元素,我会在逆数中得到同样奇怪的结果。

最佳答案

正如 Peter 所指出的,问题出在我的代码中。我仍然不明白其中的原因,但它是这样的:

我正在处理数据 CV_64F作为 float,这是一个错误,它需要被视为 double,用于写入值和读取它们。( <double> )

但是CV_32F可以被视为 float ,访问将是 <float> .

关于c++ - 逆矩阵 OpenCV。 Matrix.inv() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com