首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cv::Mat的交易方法是做什么的?

cv::Mat的交易方法是做什么的?
EN

Stack Overflow用户
提问于 2016-07-12 11:48:01
回答 2查看 4.4K关注 0票数 2

以下代码

代码语言:javascript
运行
复制
int main(int argc, char** argv)
{
  cv::Mat1b i1(cv::Size(1, 2));
  i1.at<uchar>(0, 0) = 1;
  i1.at<uchar>(1, 0) = 1;

  cv::Mat1b mask(i1.size());
  mask.at<uchar>(0, 0) = 1;
  mask.at<uchar>(1, 0) = 0;

  cv::Mat1b masked;
  mask.copyTo(masked, mask);

  masked.release(); //or .deallocate()
  cout << masked << endl;
  i1.copyTo(masked, 1 - mask);
  cout << masked << endl;
  return 0;
}

masked.release()masked.deallocate()替换时,其行为非常不同。在后一种情况下,矩阵masked一点也不修改,输出masked是掩蔽和逆掩矩阵之和,因此等于原始im1矩阵。deallocate()成员方法实际上是做什么的?我使用openCV 3.1。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-12 12:02:13

deallocate()将直接从cv::Mat中释放数据。但是,release()只会减少cv::Matref_count,如果它达到0,它将自动调用deallcoate

摘要:总是使用release,直到您知道自己在做什么。

还要注意,您不需要调用它们中的任何一个。release将在cv::Mat的析构函数期间调用。

使用cv::Mat数据后的P.S是未定义的行为。

票数 3
EN

Stack Overflow用户

发布于 2016-07-12 12:05:01

Mat::deallocate()释放矩阵时,Mat::release()减少引用计数器,并在需要时释放矩阵。当使用release()时,如果引用计数达到0,那么Mat就会被释放,而使用期()总是会释放它。更多信息这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38328063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档