【问题标题】:FileStorage OpenCV文件存储 OpenCV
【发布时间】:2013-08-01 13:52:12
【问题描述】:

我正在尝试保存相机矩阵和失真系数以供以后使用,但是我编写的代码似乎不起作用。它不在 yml 文件中存储任何类型的数据。即使我读回来,它也不会向指定的矩阵输入任何内容。 如果我做错了什么,请帮助我理解。 我正在使用 VS2010 和 OpenCV 2.4.5

    cv::Mat CameraMatrix, DistCoeffs;
    CameraMatrix = (cv::Mat_<double>(3,3) << 1,2,3,4,5,6,7,8,9);
    DistCoeffs = (cv::Mat_<double>(1,5) << 10, 11, 12, 13, 15);
    cv::FileStorage fs("IntCali.yml", cv::FileStorage::WRITE);
    fs << "CameraMatrix" << CameraMatrix;
    fs << "DistCoeffs" << DistCoeffs;
    fs.release();

    cv::FileStorage fs2("IntCali.yml", cv::FileStorage::READ);
    cv::Mat cm; fs2["CameraMatrix"] >> cm;
    cv::Mat dc;
    fs2["DistCoeffs"] >> dc;
        fs2.release();

【问题讨论】:

  • 请提供您的错误。
  • 输出 OpenCV Mat 的快速方法是这样做: cout
  • 顺便说一句,您可以打开 IntCali.yml 文件来检查其内容。它只是一个文本文件。
  • 我在输出窗口中没有显示任何错误,但是 .yml 文件中没有存储数据。它是空的。我还使用 cout 进行了检查。 CameraMatrix 和 DistCoeff 存在,但 cm 和 dc 不存在。
  • 很奇怪。在 2.4.2 和 2.4.9(master) 上完美运行

标签: opencv file-storage


【解决方案1】:
<?xml version="1.0"?>
-<opencv_storage>
-<CameraMatrix type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data> 1. 2. 3. 4. 5. 6. 7. 8. 9.</data>

</CameraMatrix>-<DistCoeffs type_id="opencv-matrix">
<rows>1</rows>
<cols>5</cols>
<dt>d</dt>
<data> 10. 11. 12. 13. 15.</data>
</DistCoeffs>
</opencv_storage>

在 xml 文件中工作。如果只对 yml 文件没有特殊要求,可以试试 xml。

【讨论】:

  • 或者yaml,也可以。
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多