如何在Matlab中将字符串存储在xml中以从opencv读取它

Posted

技术标签:

【中文标题】如何在Matlab中将字符串存储在xml中以从opencv读取它【英文标题】:How to store strings in xml in Matlab to read it from opencv 【发布时间】:2013-10-25 06:31:25 【问题描述】:

我正在将我的 mat 文件转换为 xml 文件以在 opencv 中读取它。我能够读取具有双重类型的 xml,但我无法读取字符串。如何将字符串类型存储到 xml 中,以便 opencv 可以读取并将其存储在矩阵或向量中。

color_details.name 包含如下数据:蓝色红色黄色等。

我在 matlab 中转换为 xml 的代码是:

load('color.mat');

[Row,Col]=size(color_details);
    docNode=com.mathworks.xml.XMLUtils.createDocument('opencv_storage');
    docRootNode = docNode.getDocumentElement;
    orientation=docNode.createElement('color_details_name');
    orientation.setAttribute('type_id','opencv-matrix');
    docRootNode.appendChild(orientation);
    rows=docNode.createElement('rows');
    rows.appendChild(docNode.createTextNode(num2str(Row)));
    orientation.appendChild(rows);
    cols=docNode.createElement('cols');
    cols.appendChild(docNode.createTextNode(num2str(Col)));
    orientation.appendChild(cols);
    dt=docNode.createElement('dt');
    dt.appendChild(docNode.createTextNode('d')); //not sure what to write here
    orientation.appendChild(dt);
      data=docNode.createElement('data');

for i=1:Row
    for j=1:Col
   mapdata=(color_details(i,j).name);
   data.appendChild(docNode.createTextNode(mapdata));
      data.appendChild(docNode.createTextNode(' '));

    end
end
    orientation.appendChild(data);
    orientation_save_name=['color_details_name.xml' ];
     xmlwrite(orientation_save_name,docNode);
     edit(orientation_save_name);

我在 opencv 中要读取的代码是这样的::

string filename = "color_details_name.xml";

Mat colors;
FileStorage fs;
    fs.open(filename, FileStorage::READ);

    if (fs.isOpened())
    
        cout<<"File is opened\n";
    

    fs["color_details_name"] >> colors;

    cout<<colors<<endl;
    fs.release();

但是上面的代码给出了一些类型错误。我该如何解决这个问题?

【问题讨论】:

cvRead 中出现未指定的错误。该节点不代表 cv 对象。因为我认为垫子不能存储字符串类型?并且在xml中指定的类型是double。 【参考方案1】:

我用来创建数据的方式是这样的:

M = eye(3);
reshaped = reshape(M,1,size(M,1)*size(M,2));
charM = num2str(reshaped);

data.appendChild(docNode.createTextNode(sprintf('%s',charM)));

当你使用 xmlread 时,OpenCV 将数据保存为char。所以我以同样的方式保存它。我创建了一个1xN 数组并转换为字符串。

您可以优化该代码以修剪空间并获得更小的 xml 文件,否则如果您有大矩阵,它们会很大。

【讨论】:

以上是关于如何在Matlab中将字符串存储在xml中以从opencv读取它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 中以字符串格式将工作日月份转换为日期?

如何在 HSQLDB 表列中以字符串形式保存 XML 数据

在MATLAB中将XML内容解析为正确的数据类型时出现问题

如何在 Matlab 中将字符串单元格数组转换为 int 和 NaN?

如何在 PHP 中以 HTML 格式显示 XML?

如何在 Matlab 中将字符数组的偶数和奇数索引重新分配到一个新的较小字符数组中?