0

我正在将我的 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();

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

4

1 回答 1

0

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

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

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

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

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

于 2013-10-25T14:06:10.330 回答