我有一个函数返回一个带有4行1列的opencv Mat。它在for循环中运行,迭代2到100次。

我需要的是将返回的列复制到新的Mat,以便每次迭代都添加一个新列。

我有(伪):

cv::Mat ResultMat(4, 1, CV_64F);

Mat returnMat(4, 1, CV_64F);

for (int i = 0; i < iterations; i++)
    {

returnMat= (function that returns a 4x1 Mat);

returnMat.col(0).copyTo(ResultMat.col(0));
   }

效果很好,但是每次都覆盖Resultmat列。

将最后一行替换为
returnMat.col(0).copyTo(ResultMat.col(i));

导致异常错误。

编辑:如果我将ResultMat创建为'Resultmat(4,100,CV_64F)',它可以工作,但是我需要它自行调整列数...

如何动态地将列添加到ResultMat,每个循环一个?

最佳答案

不知道为什么更改ResultMat的大小后,它对您不起作用。但这是一个解决方案,假设您知道迭代次数,基本上就是最终结果中的列数。
我定义了一个函数func()来演示在循环内部调用的函数。

Mat func() {

    Mat m(4, 1, CV_64F);
    randn(m, 0., 1.); // fill with random values.

    return m;
}

int main() {
    int iterations = 3;
    cv::Mat result(4, iterations, CV_64F);

    for (int i = 0; i < iterations; i++) {

        Mat m = func();
        m.col(0).copyTo(result.col(i));
    }
    return 0;
}

关于c++ - cv::Mat使用行数据填充新的Mats列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30524198/

10-11 17:46