2014-10-20 3 views
0

Я пытаюсь сделать стерео видение opencvsharp в C#. У меня уже есть матрица искажений, хранящаяся в файле xml. Теперь я хочу прочитать эту матрицу для вычисления. Я пробовал этот код:Как загрузить OpencvSharp.CpPlusPlus.Mat из 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: извините за мой плохой английский!

ответ

1

Я загрузил значения для матриц из файла XML, следуя примерам, представленным в репозитории OpenCvSharp.

Это, как я это сделал:

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 является строка с имя узла, в котором хранится ваш Мат, в файле.

Ее стоит отметить, что эта функция загружает объекты как 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 если вы просто хотите, чтобы добавить значения в файл, а не полностью перепиши его.

Для справки, это sample code file.