Перейти к содержимому
Compvision.ru
ssovec

помогите пожалуйста считывание из xml

Recommended Posts

Помогите пожалуйста есть xml файл в котором хранится несколько матриц типа CvMat, как их считать? не как не могу понять желательно на c#. заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почитайте здесь, если что не ясно, спрашивайте.

Здесь по-русски: http://robocraft.ru/blog/computervision/299.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как я понимаю читается с помощью функции cvRead, проблема в том что в моем файле хранится несколько матриц сразу и я не могу понять как прочитать имеено ту которую мне нужно в данный момент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

CvFileStorage fs = Cv.OpenFileStorage(cameraLeft, null, FileStorageMode.Read);

CvFileNode objectMatrix = Cv.GetFileNodeByName(fs, null, "objectPoints");

CvMat objectPoints = (CvMat)Cv.Read(fs, objectMatrix);

вот так пытаюсь читать, но выдает ошибку где я не прав понять не могу

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выложите Ваш файл, набросаю читалку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот файл буду очень благодарен, все уже прочитал вроде понятно, но студия ругается постоянно на ошибки.

camera_left.xml

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Извиняюсь что долго, отвлекли.

Вот код (читает узел imagePoints):

	FileStorage fs("camera_left.xml", FileStorage::READ);
if( !fs.isOpened() )
{
return false;
}

FileNode n =fs["imagePoints"];
Mat pts;
n >> pts;
// выводим результат
cout << pts << endl;
fs.release();
[/code] С остальным, думаю разберетесь. ЗЫ: Пример чтения и записи в XML:
[code]#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdarg.h>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "fstream"
#include "iostream"
using namespace std;
using namespace cv;


//-----------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------
int main( int argc, char** argv )
{

// Чтение из файла

FileStorage fs("camera_left.xml", FileStorage::READ);
if( !fs.isOpened() )
{
return false;
}

FileNode n =fs["imagePoints"];
Mat pts;
n >> pts;
// выводим результат
cout << pts << endl;

fs.release();

// Запись в файл

fs.open("my.xml", FileStorage::WRITE);
if( !fs.isOpened() )
{
return false;
}

Mat R = Mat_<uchar >::eye (3, 3),
T = Mat_<double>::zeros(3, 1);

fs << "R" << R; // Write cv::Mat
fs << "T" << T;

fs.release();

getchar();

return 0;
}

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо в с++ все работает пока оставлю в с++. беда в том что пытаюсь переписать код в c#, в котором все пишу в основном, вылазиет ошибка Ошибка : Аргументы-типы для метода "OpenCvSharp.CvFileStorage.Read<T>(OpenCvSharp.CvFileNode)" не должны определяться по использованию. Попытайтесь явно определить аргументы-типы/ целый день бьюсь не могу не чего найти по этой ошибке. видимо придется оставить все в с++. спасибо за код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В C# не силен, но вроде тут что-то полезное:

http://www.emgu.com/wiki/index.php/Working_with_Matrices

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Smorodov, спасибо во всем разобрался. выкладываю код на c# вдруг кто-нибудь будет тоже искать.

код читает параметр intrinsic из того файла что я выкладывал

 CvMat intrinsic_left, distortion_left;

            using (CvFileStorage fs = new CvFileStorage(cameraLeft, null, FileStorageMode.Read))

            {

                CvFileNode param = fs.GetFileNodeByName(null, "intrinsic");

                intrinsic_left = fs.Read<CvMat>(param);

            }

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×