当前位置:   article > 正文

opencv内存溢出del释放变量 (python)

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

内存溢出代码:

for imagePath in target_files_path_list:
    print(imagePath)
    img = cv2.imread(imagePath)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  • 1
  • 2
  • 3
  • 4

加入检查函数后,发现每次循环后内存容量都增大

分析原因:

  • 内存碎片:
    虽然每次循环变量都会被覆盖,但操作系统可能并未立即回收这部分内存,尤其是在大量分配和释放内存的过程中容易产生内存碎片,使得可用内存总量看似充足,但却难以分配连续的大块内存。

  • 图像数据缓存:
    OpenCV在处理图像时,可能在内部对原始图像数据进行了缓存,尤其是当图像较大时,即使img被重新赋值,之前图像的部分数据仍可能暂存在内存中,直到垃圾回收器有机会回收

解决:
del 回收变量

del img
del gray
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/185123
推荐阅读
相关标签
  

闽ICP备14008679号