1

システムのトレーニングに使用する 85 個の 26*7 バイナリ イメージがあります。これらの画像の各 Mat を XML で次々に書き込もうとしています。すべて同じ要素名 *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/を参照してください。

まず、すべての画像を格納するマットを作成します。ここでは Merged_frame と呼びます。

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

Merged_frame のサイズは、トレーニングに使用する画像のサイズと画像の数によって異なります。画像は 26*7 ...26 列、7 行であるため、x=26 です。 other したがって、行は 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 に答える