本文主要是介绍opencv内存溢出del释放变量 (python),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
报错:
cv2.error: OpenCV(3.4.17) D:\a\opencv-python\opencv-python\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 12211548 bytes in function ‘cv::OutOfMemoryError’
检查内存代码
import psutil# 获取当前进程ID
pid = os.getpid()def print_program_memory(pid):# 创建Process对象process = psutil.Process(pid)# 获取内存信息mem_info = process.memory_info()print(f"当前进程占用内存(RSS): {mem_info.rss / 1024 ** 2:.2f} MB")print(f"当前进程虚拟内存(VMS): {mem_info.vms / 1024 ** 2:.2f} MB")# 或者使用更加简洁的方式直接获取 Resident Set Size (RSS)print(f"当前进程占用内存(RSS简化版): {process.memory_info().rss / 1024 ** 2:.2f} MB")
内存溢出代码:
for imagePath in target_files_path_list:print(imagePath)img = cv2.imread(imagePath)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
加入检查函数后,发现每次循环后内存容量都增大
分析原因:
-
内存碎片:
虽然每次循环变量都会被覆盖,但操作系统可能并未立即回收这部分内存,尤其是在大量分配和释放内存的过程中容易产生内存碎片,使得可用内存总量看似充足,但却难以分配连续的大块内存。 -
图像数据缓存:
OpenCV在处理图像时,可能在内部对原始图像数据进行了缓存,尤其是当图像较大时,即使img被重新赋值,之前图像的部分数据仍可能暂存在内存中,直到垃圾回收器有机会回收
解决:
del 回收变量
del img
del gray
这篇关于opencv内存溢出del释放变量 (python)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!