在不知道矩阵名称的情况下在OpenCV中读取YML

时间:2017-12-12 23:41:46

标签: c++ opencv

OpenCV中的YML文件是否可能并且在不知道其名称的情况下检索文件中的第一个矩阵? 我通常会这样做:

cv::FileStorage fs("foo.yml", cv::FileStorage::READ);
cv::Mat bar;
fs["A"] >> bar;

如何在不知道A被命名为A的情况下实现这一目标?

我对一个不会手动解析文件并找出名称的解决方案感兴趣。

1 个答案:

答案 0 :(得分:1)

如果您了解YML的结构,可以使用FileNode进行导航,并检索元素:

#include <opencv2\opencv.hpp>

int main()
{
    cv::Mat1b src(2, 3);
    cv::randu(src, 0, 256);

    { 
        // Create a simple YML file
        cv::FileStorage fs("test.yml", cv::FileStorage::WRITE);
        fs << "foo" << src;
    }

    // Read the saved data without knowing the name
    cv::FileStorage fs("test.yml", cv::FileStorage::READ);

    // Get first node
    cv::FileNode fn = fs.getFirstTopLevelNode();

    // Get its name
    cv::String name = fn.name();

    // Retrieve data as usual
    cv::Mat res;
    fs[name] >> res;

    // Or directly from the FileNode
    cv::Mat res2;
    fn >> res2;

    return 0;
}