如何在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 中以字符串格式将工作日月份转换为日期?