Конвертировать mwArray в std :: vector <double> - PullRequest
0 голосов
/ 23 октября 2019

Я использую алгоритм сопоставления объектов, который закодирован в 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();

    }

1 Ответ

1 голос
/ 23 октября 2019

Вы можете скопировать матрицу в вектор с помощью

// Create a vector with size FSC_1.NumberOfElements()
// FSC_1_Copy allocates memory for an array
std::vector<double> FSC_1_Copy(FSC_1.NumberOfElements());

// Copy up to FSC_1.NumberOfElements() elements from FSC_1 into
// the array of FSC_1_Copy
FSC_1.GetData(FSC_1_Copy.data(), FSC_1.NumberOfElements());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...