使用opencv读取xml文件type_id opencv-image使用opencv

问题描述:

嘿,我已经尝试了很多搜索与type_id“opencv-image”读取xml文件,我在这里看到的所有是“opencv矩阵”和所有可用的帮助是无用的我。 请帮我从xml文件中读取图像矩阵。使用opencv读取xml文件type_id opencv-image使用opencv

我在这里粘贴我的XML文件的上半部分的一些想法。

<?xml version="1.0"?> 
<opencv_storage> 
<depthImg190 type_id="opencv-image"> 
<width>320</width> 
<height>240</height> 
<origin>top-left</origin> 
<layout>interleaved</layout> 
<dt>w</dt> 
<data> 
0 0 0 0 27120 27384 27120 27120 27384 27120 27120 27120 27120 27384 
27384 27664 27664 27944 27944 27664 27664 27944 27944 27944 28224 
27944 27944 28224 28224 28224 28224 28520 28816 29120 29120 29120 
29120 29120 29120 29120 29432 29744 30072 30072 29744 29744 30072 
30072 30072 30400 30400 30736 30736 31080 31080 31080 31440 31440 
31440 31440 31800 31800 31800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 27120 27120 27120 27120 27384 27384 27384 27384 27384 27384 
</depthImg190> 
</opencv_storage> 

我已经使用的代码

FileStorage f; 
Mat m; 
f.open("temp.xml", FileStorage::READ); 
f["depthImg190"] >> m; 
f.release(); 

但我面临一个异常“opencv的Errorr:在简历::阅读,文件错误的参数<未知的数组类型> ....... 。\ opencv \ modules \ core \ persistence.cpp,5535行“。

任何帮助将appriciated

+0

其中一个问题是,上面的xml是一个序列化的* IplImage *,而不是一个cv :: Mat。它不仅是“opencv-image”部分,宽度为 cols,高度为行,如果这是传统数据,那么除了cvLoad(yukk)之外,您将没有其他机会。如果你真的写了这个,你应该在第一个地方改变那个*部分。 – berak 2014-10-24 06:47:29

+0

@berak你是非常正确的,问题是我不写这些数据。我只是将这个数据集用于我的研究工作,我不得不使用这个数据集。 I'v完成所有,但在这里我卡住了,当我在循环中使用cvLoad获取通过 读取文件IplImage * depth =(IplImage *)cvLoad(getPath(filename)); 其中getPath(文件名)返回“data \\ depth \\ depthImg190.xml” ,但cvLoad没有正确读取文件,但是当我使用 IplImage * depth =(IplImage *)cvLoad(“data \\ depth \\ depthImg190.xml“);它正在正确阅读。 – Zainb 2014-10-24 08:47:01

+0

什么可以帮助我在这里,我没有得到,如果它是工作时,我给文件作为硬代码字符,但不只与变量工作。 – Zainb 2014-10-24 08:50:01

其实是有一些文件,你可以使用这样的:http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html

在任何情况下,回答你的问题很简单:

FileStorage fs("file.xml", FileStorage::READ); 
Mat image; 

fs["depthImg190"] >> image; 

(...) 

fs.release(); 

它应该工作!

+0

嘿! 我试过这个,但是我在cv :: read,file .. \ .. \ .. \ .. \ opencv \ modules \ core \ persistence中遇到了一个错误 “Opencv Errorr:Bad argument .cpp,5535行“ 我对opencv非常陌生,请你帮我解决这个问题吗?我必须尽快阅读这本XML以供我的研究。谢谢 – Zainb 2014-10-20 04:07:48

+0

我需要尽快阅读这个xml,因为我是opencv的新手,请指导我作为opencv的一个非常基础的学生。谢谢 – Zainb 2014-10-20 08:24:08

+0

如果不成功,我会请求您提供更多关于您的问题的信息,以便我们可以帮助您:您使用的代码和xml文档的结构。 – zedv 2014-10-20 11:47:06