赞
踩
报错:
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。