如何使用零()正确初始化一个指向0矩阵的cv :: Mat指针

Chr*_*ris 11 c++ opencv

我在函数顶部初始化了以下内容:

cv::Mat *m;
Run Code Online (Sandbox Code Playgroud)

然后,在循环中,我将分配具有此名称的新矩阵并将它们存储在列表中.我希望它们初始化为具有特定大小的零矩阵.

这是我试过的:

m = new cv::Mat::zeros(height, width, CV_32F);
Run Code Online (Sandbox Code Playgroud)

我根据OpenCV文档中给出的示例尝试了这个.执行此操作的正确方法是什么?

Tyl*_*man 20

Mat :: zeros的文档中可以使用它

cv::Mat m = cv::Mat::zeros(height, width, CV_32F);
Run Code Online (Sandbox Code Playgroud)

如果要Mat在堆上使用分配使用

cv::Mat * m = new cv::Mat( cv::Mat::zeros(height, width, CV_32F) );

// use m

delete m; // don't forget to delete m
Run Code Online (Sandbox Code Playgroud)

  • 如果我没弄错的话,在堆上分配cv :: Mat通常是一个坏主意?cv :: Mat结构在内部使用指向其图像数据的堆指针,因此它不会占用堆栈上的空间.它在内部使用引用计数,并在其引用计数等于零时自行删除. (8认同)
  • 在大多数情况下,在堆上分配Mat是一个坏主意. (2认同)