1

我有 85 个 26*7 的二进制图像,将用于训练系统。我试图在 XML 中一个接一个地编写这些图像的每个 Mat,所有这些都在相同的元素名称 *Training_set* 中,如下所示:-

<?xml version="1.0"?>
<opencv_storage>
<Training_set type_id="opencv-matrix">
     Mat1 values
     Mat2 values
     Mat3 values
     ......
     Mat85 values
</Training_set >
</opencv_storage>

使用以下代码:-

FileStorage fs("Samples.xml", FileStorage::WRITE);

// Check if we actually created the file
if(fs.isOpened())
{ 
        IplImage *img = cvLoadImage("eye1.bmp");
        Mat imgg=cvarrToMat(img);
        fs <<"Training_set"<< imgg;

        IplImage *img2 = cvLoadImage("eye2.bmp");
        Mat imgg2=cvarrToMat(img2);
        fs <<"Trainging_set"<<imgg2;

}

目前,我获得了:-

    <?xml version="1.0"?>
    <opencv_storage>
    <Training_set type_id="opencv-matrix">
         Mat1 values
    </Training_set >
   <Training_set type_id="opencv-matrix">
         Mat2 values
    </Training_set >
    </opencv_storage>

正如您所看到的,它们被分配给相同的元素名称,但分别被分配。这不是我想要实现的。如何在同一元素名称中一次性写入所有 Mat 值。

此 XML 将包含神经网络的训练样本集,使用 Visual Studio C++ 在 Opencv 中开发。

4

1 回答 1

0

帧合并在一起,然后写入 XML 文件。参考链接http://devblog.michalski.im/2012/05/18/combine-multiple-video-frames-into-one-using-opencv/

首先我们创建一个 Mat 来存储所有的图像,这里我称之为 Merged_frame。

Mat Merged_frame =Mat(Size(26,595), CV_8UC3);

Merged_frame 的大小取决于我用于训练的图像的大小和图像的数量。我的 x=26 因为图像是 26*7 ...26 列和 7 行。我们在一个之后垂直存储 85 个图像其他因此行将是7 * 85。

我为合并图像而开发的代码片段如下:-

 IplImage *img = cvLoadImage("X1.bmp");
 Mat im=cvarrToMat(img);
 roi = Mat(Merged_frame, Rect(0,0,26,7)); //Sets region of interest
 im.copyTo(roi);

我对每个图像都这样做了,记得相应地更改 Rect(x,y,width,height) 参数。这会将图像存储在 Merged_frame 中的特定位置。

每个图像存储后,我们可以将 Merged_frame 发送到 XML 文件。

我达到了我需要的结果,希望这对像我这样的图像处理新手有所帮助。:) 咕噜咕噜!!!

于 2013-08-31T20:44:53.217 回答