【问题标题】:How to load a txt/.pgn.camera file and store it in matrices in c++/opencv如何加载 txt/.pgn.camera 文件并将其存储在 c++/opencv 中的矩阵中
【发布时间】:2013-08-06 13:39:11
【问题描述】:

我想加载一些相机文件来计算两个图像的基本矩阵。这些文件采用.png.camera 格式,space-delimited,来自免费数据集。它们看起来像:

2759.48 0 1520.69 
0 2764.16 1006.81 
0 0 1 
0 0 0
0.582226 -0.0983866 -0.807052 
-0.813027 -0.0706383 -0.577925 
-0.000148752 0.992638 -0.121118 
-8.31326 -6.3181 0.16107

前 3 行是相机矩阵 K,所以我想将它们存储在一个名为 K 的矩阵 cv::Mat 中。

第 5-7 行是旋转矩阵,最后一行是平移向量。

我想用这些矩阵做一些进一步的计算。

我想知道我是否可以通过 OpenCV 来完成(我使用的是 2.4.5 版本)。

任何建议将不胜感激!!!

【问题讨论】:

    标签: c++ opencv computer-vision


    【解决方案1】:

    我不知道是否有一些现有的opencv api,但您可以轻松地自己做:

    float K[3];
    float Rot1[9];
    float Rot2[9];
    float T[3];
    
    FILE* f = fopen(".png.camera", "r");
    
    if (f) {
      printf("File successfully opened.\n");
    
      fscanf(f, "%f %f %f", &K[0], &K[1], &K[2]);
      fscanf(f, "%f %f %f %f %f %f %f %f %f", &Rot1[0], &Rot1[1], &Rot1[2], &Rot1[3], &Rot1[4], &Rot1[5], &Rot1[6], &Rot1[7], &Rot1[8]);
      fscanf(f, "%f %f %f %f %f %f %f %f %f", &Rot2[0], &Rot2[1], &Rot2[2], &Rot2[3], &Rot2[4], &Rot2[5], &Rot2[6], &Rot2[7], &Rot2[8]);
      fscanf(f, "%f %f %f", &T[0], &T[1], &T[2]);
    
      fclose(f);
    }
    else
    {
      printf("Cannot open file.\n");
    }
    

    【讨论】:

    • 不错的方法。但我希望将值存储在 OpenCV 矩阵中,例如垫 K(3,3,CV_32FC1)。这可能吗?
    • 使用&K.at(0,0) 代替&K[0] (opencv.willowgarage.com/documentation/cpp/…)
    • 我使用 &K.at(0,0) 现在它们可以存储到 OpenCV 矩阵中,但是当我打印出来时,它们似乎填充了相同的值 -4.31602* 10^8,这不是文本文件中的内容。
    • 如何打印出来?
    • 只用 cout
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多