cv :: Mat构造函数在哪里明确定义?

时间:2012-12-23 18:53:28

标签: c++ opencv

[1]在OpenCV源代码中定义的cv :: Mat数据结构构造函数(在C / C ++中)在哪里?

我假设cv :: Mat数据结构在类似

之类的情况下动态分配给堆

cv::Mat mat(rows, cols, type);

被调用,但无法在

中找到ANSI C或C ++实现

opencv / modules / core / src / matrix.cpp也不在

opencv / modules / core / src / datastructs.cpp

已解决: cv::Matmatrix.cpp中分配了fastMalloc()。这是在cv::Mat:create() function内执行的。

[2]此外,我很想知道在执行图像处理操作时cv :: Mat在硬件中的位置:

。总是在“主存储器”(SDRAM)中,

。总是在片上缓存(SRAM),

。或两者的某种组合?

2 个答案:

答案 0 :(得分:2)

  

cv :: Mat mat(rows,cols,type);

这是内联构造函数,它在core/mat.hpp

中实现
inline Mat::Mat(int _rows, int _cols, int _type) : size(&rows)
{
    initEmpty();
    create(_rows, _cols, _type);
}

答案 1 :(得分:1)

实际的构造函数在

... / core / core.hpp

class CV_EXPORTS Mat
{
public:
    //! default constructor
    Mat();
    //! constructs 2D matrix of the specified size and type
    // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
    Mat(int rows, int cols, int type);
    Mat(Size size, int type);
    //! constucts 2D matrix and fills it with the specified value _s.
    Mat(int rows, int cols, int type, const Scalar& s);
    Mat(Size size, int type, const Scalar& s);

    //! constructs n-dimensional matrix
    Mat(int ndims, const int* sizes, int type);
    Mat(int ndims, const int* sizes, int type, const Scalar& s);

    //! copy constructor
    Mat(const Mat& m);
    //! constructor for matrix headers pointing to user-allocated data
    Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);
    Mat(Size size, int type, void* data, size_t step=AUTO_STEP);
    Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0);
 .....

};