繁体   English   中英

将 mwArray 转换为 std::vector<double></double>

[英]Convert mwArray to std::vector<double>

我正在使用编码在 Matlab 中的特征匹配算法。 我使用 Matlab 的库编译器为 C++ 创建了共享库。
结果,我得到了一个由 n 个特征点和点坐标 x,y(n 行,2 列)组成的 mwArray。 现在我想将 mwArray 转换为std::vector<double>甚至更好的std::vector<cv::Point2d>以便我可以继续。

我尝试使用GetData()方法,但我不知道必须使用哪个 arguments。 这是代码:

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();

    }

您可以将矩阵复制到一个向量中

// 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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM