如何在 OpenCV 中将 Float Mat 写入文件

新手上路,请多包涵

我有一个矩阵

Mat B(480,640,CV_32FC1);

包含浮动值..我想将此矩阵写入可以在记事本或 Ms word 或 Excel 中打开的文件中以查看内部值并进行存储.. imwrite 函数 只能保存 8 位或 16 位图像..

如果可以这样做,请提出您的建议?如果是,如何?

原文由 Karthik Murugan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用纯 OpenCV API 调用:

 // Declare what you need
cv::FileStorage file("some_name.ext", cv::FileStorage::WRITE);
cv::Mat someMatrixOfAnyType;

// Write to file!
file << "matName" << someMatrixOfAnyType;

文件扩展名可以是 xmlyml 。在这两种情况下,您都会得到一个可以轻松删除/解析的小标题,然后您可以访问浮点格式的数据。我成功地使用了这种方法(使用 yml 文件)将数据导入 Matlab 和 Matplotlib

要获取数据:

  1. 使用任何编辑器打开文件
  2. 然后抑制除数据标签内容(即像素值)之外的所有文本和数字。
  3. 完成后,使用 txt 或 csv 扩展名保存文件并使用 matlab 打开它(拖放工作)。

瞧。如果它没有正确猜测图像大小,您可能必须在 matlab 命令行中重塑生成的矩阵。

原文由 sansuiso 发布,翻译遵循 CC BY-SA 4.0 许可协议

OpenCV 可以以 JSONXMLYAML 格式序列化(保存)其对象。您可以使用任何了解这些格式的编辑器来读取这些文件,或使用 OpenCV 从这些文件中下载数据(反序列化)。可以在 此处 找到如何完成此操作的详细说明。简而言之,要将数据存储到 xml 文件中,您必须调用

cv::FileStorage fs("/path/to/file.xml", cv::FileStorage::WRITE); // create FileStorage object
cv::Mat cameraM; // matrix, which you need to save, do not forget to fill it with some data
fs << "cameraMatrix" << cameraM; // command to save the data
fs.release(); // releasing the file.

If you want to use JSON or YAML , just change the extension to .json or .yaml/.yml - openCV will automatically understand your intentions.

重要的是命令

fs << "cameraMatrix" << cameraM;

字符串 "cameraMatrix" 是标签名称,该矩阵将存储在该名称下,稍后可以在文件中找到该矩阵。

请注意, xml 格式不允许您使用带有空格和一些特殊字符的标签名称,因为只允许使用字母数字值、点、破折号和下划线(详见 XML 规范) ,而在 YAMLJSON 你可以有类似的东西

fs << "Camera Matrix" << cameraM;

原文由 John Smith 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题