保留矢量记忆cv ::未知大小的垫子

时间:2015-06-27 10:02:30

标签: c++ opencv matrix vector

我想用一定量的内存初始化一个std :: vector,因此我必须使用std::vector::reserve。 我完全理解它适用于像int float等数据类型。

但是它应该如何适用于cv::Mat它基本上可以根据尺寸变化所需的内存。

我想知道是否有一种方法可以使用传递给它的矩阵的大小来初始化向量。否则,我认为将reserve()与数据类型(如矩阵)一起使用是没有任何意义的。

2 个答案:

答案 0 :(得分:1)

cv::mat矩阵分配构造函数中的数据。正如您所见below,数据只是指向某些数据的指针:

class CV_EXPORTS Mat
{
public:
    // ... a lot of methods ...
    ...

    /*! includes several bit-fields:
         - the magic signature
         - continuity flag
         - depth
         - number of channels
     */
    int flags;
    //! the array dimensionality, >= 2
    int dims;
    //! the number of rows and columns or (-1, -1) when the array has more than 2 dimensions
    int rows, cols;
    //! pointer to the data
    uchar* data;

    //! pointer to the reference counter;
    // when array points to user-allocated data, the pointer is NULL
    int* refcount;

    // other members
    ...
};

数据不会静态存储在矩阵中。所以每个垫子应该是相同的尺寸。 在你的用例中使用vector甚至没有意义,因为你似乎不需要存储不同大小的对象(除非你还计划添加从cv :: Mat派生的对象)

答案 1 :(得分:0)

cv::mat的堆栈大小在编译时与所有其他对象一样是常量。您可以使用sizeof(cv::mat)来学习它。因此,您可以安全地将std::vector::reserve用于任何对象。