Mat对象使用引用计数,因此当销毁最后一个Mat对象时,将释放矩阵.但是,如果我们Mat从a创建一个,会发生什么IplImage*:
IplImage* img = cvLoadImage("test.png", 1);
{
Mat mtx(img); // convert IplImage* -> Mat
}
Run Code Online (Sandbox Code Playgroud)
是否也有IplImage一个参考,或者一旦垫被毁坏它会留下一个悬垂的指针吗?
如果您在此处查看文档,则copyData该运算符有一个参数.
Mat::Mat(const IplImage* img, bool copyData=false)
Run Code Online (Sandbox Code Playgroud)
文档说明如下:
img - 指向旧式IplImage图像结构的指针.默认情况下,数据在原始图像和新矩阵之间共享.但是,当设置copyData时,将创建图像数据的完整副本.
所以,如果你使用copyData=true mtx变量将拥有自己的内存,或者如果你使用copyData=false mtx变量将共享内存img.在任何一种情况下,当mtx被销毁时img都不会悬空,但是如果你想要它被销毁,它需要通过调用释放功能来清理.另外,在第一种情况下,你可以img在销毁之前释放mtx,在后者你不能.
注意:没有引用计数IplImage.
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |