ssovec 1 Жалоба Опубликовано July 30, 2012 Помогите пожалуйста есть xml файл в котором хранится несколько матриц типа CvMat, как их считать? не как не могу понять желательно на c#. заранее спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 30, 2012 Почитайте здесь, если что не ясно, спрашивайте. Здесь по-русски: http://robocraft.ru/blog/computervision/299.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ssovec 1 Жалоба Опубликовано July 30, 2012 как я понимаю читается с помощью функции cvRead, проблема в том что в моем файле хранится несколько матриц сразу и я не могу понять как прочитать имеено ту которую мне нужно в данный момент. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ssovec 1 Жалоба Опубликовано July 30, 2012 CvFileStorage fs = Cv.OpenFileStorage(cameraLeft, null, FileStorageMode.Read); CvFileNode objectMatrix = Cv.GetFileNodeByName(fs, null, "objectPoints"); CvMat objectPoints = (CvMat)Cv.Read(fs, objectMatrix); вот так пытаюсь читать, но выдает ошибку где я не прав понять не могу Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 30, 2012 Выложите Ваш файл, набросаю читалку. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ssovec 1 Жалоба Опубликовано July 30, 2012 вот файл буду очень благодарен, все уже прочитал вроде понятно, но студия ругается постоянно на ошибки.camera_left.xml Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 30, 2012 Извиняюсь что долго, отвлекли. Вот код (читает узел 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; } 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ssovec 1 Жалоба Опубликовано July 30, 2012 спасибо в с++ все работает пока оставлю в с++. беда в том что пытаюсь переписать код в c#, в котором все пишу в основном, вылазиет ошибка Ошибка : Аргументы-типы для метода "OpenCvSharp.CvFileStorage.Read<T>(OpenCvSharp.CvFileNode)" не должны определяться по использованию. Попытайтесь явно определить аргументы-типы/ целый день бьюсь не могу не чего найти по этой ошибке. видимо придется оставить все в с++. спасибо за код. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано July 30, 2012 В C# не силен, но вроде тут что-то полезное: http://www.emgu.com/wiki/index.php/Working_with_Matrices 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ssovec 1 Жалоба Опубликовано July 30, 2012 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); } 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах