根据 these instructions,我在英特尔 Ubuntu 系统上本地构建了 OpenCV .捕获 1000 张图像的几乎相同的 python、c++ 和 julia 演示程序大部分按预期执行。 python 和 c++ 版本完美运行,但“top”显示 julia 版本在运行时以每秒数十 MB 的速度增加了对系统内存的使用。如果放置时间足够长,系统会耗尽内存并锁定。
为什么 julia 代码似乎会导致内存泄漏,我该如何解决?
using OpenCV
using Printf
cv = OpenCV
function main( )
vidDevice="/dev/video0"
cap = cv.VideoCapture(vidDevice)
count = 1000
while (cv.isOpened(cap) && count > 0)
@printf("Capturing %4d\r", count)
ret,img = cv.read(cap)
count = count - 1
end
cv.release(cap)
cv.destroyAllWindows()
end
main()
最佳答案
该代码导致内存泄漏,因为 Julia GC 并不“知道”Mat 对象的实际大小,并认为它只是一个指针的大小。您可以通过在循环中插入 GC.gc()
强制 GC 运行来使此代码以类似于 Python 的方式工作,但这并不能解决核心问题,即 GC 不会自动运行即使系统内存不足。
您的代码的这个修改版本应该可以正常工作 -
using OpenCV
using Printf
cv = OpenCV
function main( )
vidDevice="/dev/video0"
cap = cv.VideoCapture(vidDevice)
count = 1000
while (cv.isOpened(cap) && count > 0)
@printf("Capturing %4d\r", count)
GC.gc()
ret,img = cv.read(cap)
count = count - 1
end
cv.release(cap)
cv.destroyAllWindows()
end
main()
我在 https://github.com/opencv/opencv_contrib/issues/2766 为这个问题创建了一个跟踪器
关于opencv - 如何修复图像捕获中的 Julia OpenCV Cxx 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64978891/