如何清除 cv::Mat 内容?
Posted
技术标签:
【中文标题】如何清除 cv::Mat 内容?【英文标题】:How to clear the cv::Mat contents? 【发布时间】:2013-05-29 14:55:55 【问题描述】:我有一个cv::Mat
,但我已经插入了一些值,如何清除其中的内容?
谢谢
【问题讨论】:
【参考方案1】:如果要释放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
【讨论】:
如果你使用 m.release() 并尝试再次使用 Mat,你会得到一个错误。由于他似乎只是一个重置值,分配一个标量值听起来更好的方法。 @luiz_s81 不清楚他想要什么;这取决于用户。无论如何将 Mat 元素设置为零有什么意义?这是一个额外的操作,不会使矩阵占用更少的内存。如果他想重用矩阵,他不妨保留前一个矩阵,然后在需要时将其元素重新分配给他想要的任何东西(不一定是零)。【参考方案2】:来自docs:
// sets all or some matrix elements to s
Mat& operator = (const Scalar& s);
那么我们可以做
m = Scalar(0,0,0);
用黑色像素填充。标量有 4 个组件,最后一个 - alpha - 是可选的。
【讨论】:
【参考方案3】:你应该调用 release() 函数。
Mat img = Mat(Size(width, height), CV_8UC3, Scalar(0, 0, 0));
img.release();
【讨论】:
【参考方案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;
【讨论】:
m.release() 将删除 Mat 变量的内存。但是,只需将 m 分配给 Mat() 将清除内容,这并不意味着要继续使用 m.release()。在 m 被分配 Mat() 之后,它可以重新分配给其他一些值,例如 Mat::zeros(2,3, CV_8U)【参考方案5】:如果你想清空垫子但继续使用变量,你总是可以重新声明它。如果这就是你想要的,我不知道,但由于“清理”垫子的另一个答案是 .release() 我只想提一下。
编辑:我的错。我没有意识到我的答案有多不清楚。我只是在回答“如何清除 Mat 变量的内容”的问题。另一个人回答说,一个人可以对变量执行 .release() ,例如,这个人有一个变量,例如
cv::Mat testMat;
和后来它被宣布(正如问题所暗示的那样)。
一个人说你可以做一个简单的testMat.release()
。如果这就是 op 想要的,那么你就去吧。但是如果 op 只是想清除变量的声明,我只是想提一下他/她可以重新声明它,就像稍后做一个简单的 testMat = *some new information*
一样。另外,我混淆了定义和声明。我的坏
【讨论】:
请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。以上是关于如何清除 cv::Mat 内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?