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

文章探讨了在使用OpenCV处理图像时遇到的内存溢出错误,分析了内存碎片和图像数据缓存可能导致的问题。提出通过del语句及时回收变量来缓解内存压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值