0

C# で opencvsharp のステレオ ビジョンを実行しようとしています。既に xml ファイルに保存されている歪みマトリックスがあります。ここで、計算に使用する行列を読みたいと思います。私はこのコードを試しました:

FileStorage fs = new FileStorage();
fs.Open("intrinsics.yml",FileStorageMode.FormatYaml);
Mat M1, M2, D1, D2;
fs["M1"] >> M1;
fs["D1"] >> D1;
fs["M2"] >> M2;
fs["D2"] >> D2;

しかし、それはうまくいきません。誰かがそれを手伝ってくれますか?前もって感謝します。P/S: 下手な英語でごめんなさい!

4

1 に答える 1

1

OpenCvSharp リポジトリで提供されている例に従って、XML ファイルから行列の値を読み込みました。

これが私がやった方法です:

Mat matrix;

using (CvFileStorage fs = new CvFileStorage(xmlfile, null, FileStorageMode.Read))
{
    CvFileNode param = fs.GetFileNodeByName(null, nodeName);
    matrix = new Mat(fs.Read<CvMat>(param));
}

xmlfile は、持っている XML/YAML ファイルへのパス (この場合は "intrinsics.yml") であり、nodeName は、Mat がファイルに格納されているノードの名前を含む文字列です。

この関数は、Mat ではなく CvMat としてオブジェクトをロードすることに注意してください。

new Mat()

必要なものに変換します。より多くのデータを回復する必要がある場合は、ブラケットを使用してより多くの値を読み込むことができます。

完全を期すために、XML/YAML ファイルに値を書き込む方法を次に示します。

Mat matrix;
string nodeName = "sample_matrix";

using (CvFileStorage fs = new CvFileStorage(xmlfile, null, FileStorageMode.Write))
{
    fs.Write(nodeName, matrix.ToCvMat());
    fs.StartNextStream();
}

ファイルに値を追加するだけで、完全には書き換えない場合は、FileStorageMode.Write を FileStorageMode.Append に交換できます。

参考までにサンプルコードファイルです

于 2015-06-03T15:39:41.367 に答える