如果释放原始垫子,子垫子会发生什么
What happens to submats if the original mat is released
在 OpenCV 中,我正在获取图像并裁剪掉一些 ROI(使用 mat.submat(...)
)。我想避免克隆子垫以节省时间和内存,但我担心图像可能会在 rois 之前发布。鉴于 submat
returns a Mat
使用原始 Mat
作为其后备存储,我的问题是:子垫在其父垫被释放后会发生什么?之后使用子垫是否安全?
下面是解释问题的代码:
// Some big image that I get from somewhere
Mat image = Mat.zeros(1080, 1920, CvType.CV_8UC3);
Mat roi = image.submat(10, 20, 10, 20);
image.release();
// Still safe to use roi?
Mat blurredRoi = new Mat();
Imgproc.blur(roi, blurredRoi, new Size(5, 5));
OpenCV 使用引用计数。
submat 添加另一个对数据存储器的引用。
.release() 不会释放内存,除非最后一个引用是 removed/decremented.
在 OpenCV 中,我正在获取图像并裁剪掉一些 ROI(使用 mat.submat(...)
)。我想避免克隆子垫以节省时间和内存,但我担心图像可能会在 rois 之前发布。鉴于 submat
returns a Mat
使用原始 Mat
作为其后备存储,我的问题是:子垫在其父垫被释放后会发生什么?之后使用子垫是否安全?
下面是解释问题的代码:
// Some big image that I get from somewhere
Mat image = Mat.zeros(1080, 1920, CvType.CV_8UC3);
Mat roi = image.submat(10, 20, 10, 20);
image.release();
// Still safe to use roi?
Mat blurredRoi = new Mat();
Imgproc.blur(roi, blurredRoi, new Size(5, 5));
OpenCV 使用引用计数。
submat 添加另一个对数据存储器的引用。
.release() 不会释放内存,除非最后一个引用是 removed/decremented.