当前位置: 首页 > news >正文

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
http://www.lryc.cn/news/307704.html

相关文章:

  • 【算法与数据结构】复杂度深度解析(超详解)
  • Upload-Labs-Linux1【CTF】
  • 搜维尔科技:OptiTrack 提供了性能最佳的动作捕捉平台
  • java设计模式之职责链模式
  • 连不上网的解决办法集--持续更新
  • Unity之PUN2插件实现多人联机射击游戏
  • 72_Pandas.DataFrame保存并读取带pickle的系列(to_pickle、read_pickle)
  • Redis哨兵模式和Redis Cluster模式
  • C语言第三十二弹---自定义类型:联合和枚举
  • milvus upsert流程源码分析
  • QT网络通信
  • 案例分析|山西某光伏发电站轨道巡检机器人解决方案
  • Apache POl
  • 高防服务器托管应注意什么
  • swagger-ui.html报错404,解决办法
  • golang 函数式编程库samber/mo使用: Future
  • 【Spring连载】使用Spring Data访问 MongoDB(十四)----Mongodb特有的查询方法
  • 消息中间件篇之RabbitMQ-消息重复消费
  • 常见设计模式之单例模式
  • VL817-Q7 USB3.0 HUB芯片 适用于扩展坞 工控机 显示器
  • 【Android安全】Windows 环境下载 AOSP 源码
  • Vue.js+SpringBoot开发快递管理系统
  • Linux/Spectra
  • C 嵌入式系统设计模式 08:硬件代理模式
  • 【k8s配置与存储--持久化存储(PV、PVC、存储类)】
  • 【Vite】解决Vite http proxy error: Error: connect ECONNREFUSED
  • FPGA领域顶级学术会议
  • 罗技鼠标滚轮模式介绍 | 鼠标滚轮异响 - 解决方案
  • Scrapy与分布式开发(2.2):正则表达式
  • 今年“全国爱耳日”主题确定!立聪堂助听器组织社区义诊