【发布时间】:2016-11-14 15:32:09
【问题描述】:
以下代码
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。
【问题讨论】:
-
Mat::release。通过在调用
deallocate()之后使用该对象,您可能会遇到未定义的行为。 -
我认为
release()和deallocate()做同样的事情。并且两者都应该使对象处于“清除”状态。 -
除非文档明确指出
release()和deallocate()不做同样的事情 :)
标签: c++ opencv reference-counting opencv-mat