5

解決策が見つからない問題が 1 つあります。

1 つの既知の行列の逆行列を使用して計算を行う必要があります。

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);
}

関数 printMatrix:

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しかし、要素を個別に出力すると、逆数で同じ奇妙な結果が得られるため、エラーはありません。

4

1 に答える 1

12

Peter が指摘したように、問題は私のコードにありました。その理由はまだよくわかりませんが、次のようなものです。

データCV_64Fを float として扱っていましたが、これは間違いです。値を書き込んで読み取るには、double として扱う必要があります。( <double>)

ただしCV_32F、float として扱うことができます。アクセスは<float>.

于 2012-06-14T12:50:57.847 に答える