如何创建矢量<Mat>?

How to create vector<Mat>?

我尝试运行此代码来创建一个vector<Mat>

vector<Mat> scoreImgs(8, Mat(size, CV_32FC1));

我发现不是深拷贝。我不想使用 forwhile,例如:

for (int i = 0; i < 8; ++i) 
{
    scoreImgs[i] = move(Mat(size, CV_32FC1));
}

那么我怎样才能用深拷贝创建一个vector<Mat>

vector<Mat> scoreImgs;
std::generate_n(std::back_inserter(scoreImgs), 8,
                []() { return Mat(size, CV_32FC1); });

编写辅助函数可能会有用:

std::vector<Mat> vectorOfNClonedCvMat(cv::Mat toClone, size_t n)
{
    std::vector<Mat> r;
    r.reserve(n);
    std::generate_n(std::back_inserter(r), n,
                    [&toClone]() { return toClone.clone(); });
    return r;
}

如果您要为正在创建的所有对象初始化相同的值,那么 Merek R 的回答是个好方法。

或者你可以简单地使用 emplace_back() 方法来 std::vector 我假设你会为你正在实例化的 8 个不同的对象初始化不同的值,所以我在下面使用 for 循环来演示。

参考:http://www.cplusplus.com/reference/vector/vector/emplace_back/

#include <stdio.h>
#include <iostream>
#include <vector>

#define CV_32FC1 100

class Mat {
    public:
        Mat(int size, int cv) {}
        ~Mat() {}
};

int main()
{
    int size = 50;
    std::vector<Mat> scoreImgs;
    for (int i = 0; i < 8; i++) {
        scoreImgs.emplace_back(size, CV_32FC1);
    }

    return 0;
}