以下是我遇到问题的代码的一部分,memory_profiler跟踪内存使用情况
27 48.500 MiB 0.000 MiB logging.debug("Initialize camera...")
29 63.996 MiB 15.496 MiB self.capture = cv.CaptureFromCAM(0)
30 78.102 MiB 14.105 MiB cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_EXPOSURE,self.config.trackExposure)
31 59.551 MiB -18.551 MiB del self.capture
创建捕获对象并配置属性使用29.601 MiB的内存。
但是,当我删除self.capture时,它只能回收18.551 MiB。
是否也在cv2中......
28 48.480 MiB 0.000 MiB logging.debug("Initialize camera...")
30 65.652 MiB 17.172 MiB self.capture = cv2.VideoCapture(0)
31 77.883 MiB 12.230 MiB self.capture.set(cv.CV_CAP_PROP_EXPOSURE,self.config.trackExposure)
32 59.332 MiB -18.551 MiB self.capture.release()
33 59.332 MiB 0.000 MiB del self.capture
答案 0 :(得分:1)
跟进 -
无法找到我的问题的答案,所以现在我的工作是在整个脚本退出之前不释放/删除相机。
似乎有一种记忆税"每次打开和关闭相机时,opencv都不会释放一些内存。
如果缓冲区看起来滞后或者保留旧图像,那么我的修复工作就是去清洁"手动缓存......
for x in range(3):
garbage = self.capture.QueryFrame()
它并不优雅,但它完成了工作。