報錯:
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