以下代码
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。
发布于 2016-07-12 12:02:13
deallocate()将直接从cv::Mat中释放数据。但是,release()只会减少cv::Mat的ref_count,如果它达到0,它将自动调用deallcoate。
摘要:总是使用release,直到您知道自己在做什么。
还要注意,您不需要调用它们中的任何一个。release将在cv::Mat的析构函数期间调用。
使用cv::Mat数据后的P.S是未定义的行为。
发布于 2016-07-12 12:05:01
当Mat::deallocate()释放矩阵时,Mat::release()减少引用计数器,并在需要时释放矩阵。当使用release()时,如果引用计数达到0,那么Mat就会被释放,而使用期()总是会释放它。更多信息这里
https://stackoverflow.com/questions/38328063
复制相似问题