25

我有一个cv::Mat,但我已经插入了一些值,如何清除其中的内容?

谢谢

4

5 回答 5

24

如果要释放Mat变量的内存,请使用release().

Mat m;
// initialize m or do some processing
m.release();

对于cv::Mat对象向量,您可以使用 释放整个向量的内存myvector.clear()

std::vector<cv::Mat> myvector;
// initialize myvector .. 

myvector.clear(); // to release the memory of the vector
于 2013-05-29T15:10:38.617 回答
13

文档

// sets all or some matrix elements to s
Mat& operator = (const Scalar& s);

那么我们可以做

m = Scalar(0,0,0);

用黑色像素填充。标量有 4 个组件,最后一个 - alpha - 是可选的。

于 2013-05-29T15:02:33.633 回答
8

您应该调用 release() 函数。

 Mat img = Mat(Size(width, height), CV_8UC3, Scalar(0, 0, 0));
 img.release();
于 2013-05-29T15:10:01.850 回答
4

您可以release将当前内容或分配一个新的Mat.

Mat m = Mat::ones(1, 5, CV_8U);

cout << "m: " << m << endl;
m.release();  //this will remove Mat m from memory

//Another way to clear the contents is by assigning an empty Mat:
m = Mat();

//After this the Mat can be re-assigned another value for example:
m = Mat::zeros(2,3, CV_8U);
cout << "m: " << m << endl;
于 2015-04-20T18:25:49.143 回答
0

如果您想清空垫子但继续使用变量,您可以随时重新声明它。如果那是您想要的,我不知道,但是由于“清除”垫子的另一个答案是 .release() 我只想提一下。

编辑:我的坏。我没有意识到我的答案有多不清楚。我只是在回答“如何清除 Mat 变量的内容”的问题。另一个人回答说,一个人可以对变量执行 .release() ,例如,这个人有一个变量 like cv::Mat testMat;,然后它被声明(正如问题所暗示的那样)。一个人说,你可以做一个简单的testMat.release(). 如果这就是 op 想要的,那么你就去吧。但是如果 op 只是想清除变量的声明,我只想提一下他/她可以重新声明它,就像testMat = *some new information*稍后做一个简单的一样。另外,我混淆了定义和声明。我的错

于 2021-09-09T19:38:33.500 回答