c++ - 将 mwArray 转换为 std::vector<double>

标签 c++ matlab opencv shared-libraries feature-extraction

我正在使用在 Matlab 中编码的特征匹配算法。我使用 Matlab 的库编译器为 C++ 创建了共享库。
结果,我得到了一个由 n 个特征点和点坐标 x、y(n 行,2 列)组成的 mwArray。现在我想将 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();

    }

最佳答案

您可以将矩阵复制到 vector 中

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

关于c++ - 将 mwArray 转换为 std::vector<double>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518773/

相关文章:

c++ - Arduino写入屏幕的速度

c++ - 二进制文件位操作

matlab - 如何将 {1xN cell} 数组的 {Mx1} 元胞数组转换为 {Mx1 cell} 数组的 {1xN} 元胞数组?

python opencv matchTemplate 是否实现了掩码功能?

python - GCP - 使用 Python 将 GCS 中的图像读入 Datalab

node.js - node.js openCV 基础教程

c++ - 使用 boost::filesystem 遍历目录而不抛出异常

c++ - C++中的逆向工程虚函数代码

matlab - 帮助我理解 FFT 函数(Matlab)

matlab - Matlab 中的平均值