Я использую алгоритм сопоставления объектов, который закодирован в Matlab. Я создал общие библиотеки для C ++, используя библиотечный компилятор Matlab.
В результате я получаю mwArray, состоящий из n характерных точек и координат точек x, y (n строк, 2 столбца). Теперь я хотел бы преобразовать mwArray в std::vector<double>
или даже лучше std::vector<cv::Point2d>
, чтобы я мог продолжить.
Я пытался использовать методы GetData()
, но я не знаю, какие аргументы мне нужноиспользовать. Вот код:
mclmcrInitialize();
//const char *args[] = { "-nojvm" };
//const int count = sizeof(args) / sizeof(args[0]);
if (!mclInitializeApplication(NULL, 0)) {
std::cerr << "Could not initialize the application properly" << std::endl;
return -1;
}
if (!MatchingInitialize()) {
std::cerr << "Could not initialize the library properly" << std::endl;
return -1;
}
else {
try {
// Create the output arrays
mwArray FSC_1, FSC_2, NBCS_1, NBCS_2;
mwArray path_1 = "C:\\test\\img_1.jpg";
mwArray path_2 = "C:\\test\\img_2.jpg";
Matching(1, FSC_1, FSC_2, NBCS_1, NBCS_2, path_1, path_2);
// Output that works
std::cout << "The value is " << FSC_1 << std::endl;
// Conversions I tried
double *FSC_1_Copy = mxGetPr(FSC_1.GetData());
std::vector<double> FSC_1_Copy = FSC_1.GetData();
std::vector<double> data_copy;
FSC_1.GetData(data_copy, FSC_1.RowIndex());
}
catch (const mwException& e) {
std::cerr << e.what() << std::endl;
return -2;
}
catch (...) {
std::cerr << "Unexpected error thrown" << std::endl;
return -3;
}
MatchingTerminate();
}