2
我想清楚地了解Mat(OpenCV)在很多特定情况下的工作原理。我想询问这则讯息的情况有以下几种:当被重新分配或作为投资回报时,Mat垫片会被自动释放吗?
当垫指针被重新分配到其他位置,将以前的报头和数据存储器自动被删除?例如:
Mat *m = XXX; m = YYY;
如果我调用sourceMat.release(),它是否也释放头m?
Mat m = sourceMat(Rect);
我想清楚地了解Mat(OpenCV)在很多特定情况下的工作原理。我想询问这则讯息的情况有以下几种:当被重新分配或作为投资回报时,Mat垫片会被自动释放吗?
当垫指针被重新分配到其他位置,将以前的报头和数据存储器自动被删除?例如:
Mat *m = XXX;
m = YYY;
如果我调用sourceMat.release(),它是否也释放头m?
Mat m = sourceMat(Rect);
对于第二个问题,答案是NO 。
从OpenCV's doc,Mat Mat::operator()(const Rect& roi) const
将产生一个新的标题。因此释放sourceMat
不会影响m
。
快速回答:永远不要使用Mat指针!在堆栈上始终创建Mats,内部引用计数将完成剩下的工作(因此您永远不需要使用发布) – Miki
对于第一个问题,“XXX”和“YYY”是什么?如果它们是'cv :: Mat',则应该是'Mat * m =&XXX'和'm =&YYY'。 – herohuyongtao
@herohuyongtao是的,这就是我的意思。 – 0nand0n