0

mat ファイルを xml ファイルに変換して、opencv で読み取ります。double 型の xml は読めたのですが、文字列が読めません。文字列型をxmlに保存して、opencvがそれを読み取ってマトリックスまたはベクトルに保存できるようにするにはどうすればよいですか。

color_details.name には、青、赤、黄などのデータが含まれています。

xmlで変換するためのmatlabの私のコードは次のとおりです。

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)));

OpenCVcharは xmlread を使用する場合と同じようにデータを保存します。なので、同じように保存します。配列を作成し1xN、文字列に変換します。

そのコードを最適化してスペースをトリミングし、より小さなxmlファイルを取得できます。そうしないと、大きなマトリックスがある場合に巨大になります。

于 2013-10-25T14:06:10.330 に答える