macOS环境下Python调用cv2.imshow出现内存泄漏问题的求助
macOS环境下Python调用cv2.imshow出现内存泄漏问题的求助
大家好,我遇到了一个在macOS上用Python调用OpenCV的cv2.imshow时出现内存泄漏的问题,想请教下有没有人能帮忙复现这个问题、分析背后的原因,以及提供解决或规避的方法?
我的测试环境
我在两台不同的机器上都测试过,都出现了同样的内存泄漏现象:
- 第一台机器:
- macOS 10.12 和 10.13
- Python 3.8.10
- OpenCV 3.4.18
- NumPy 1.24.4
- 第二台机器:
- Python 3.9.1
- OpenCV 4.10.0
- NumPy 2.02
问题排查过程
我做了几个测试来定位问题:
- 最初的现象是,每次循环迭代(也就是每次更新图像并显示时),Python进程的内存占用都会增加,增加的量和图像的大小直接相关。
- 当我把图像缩小后再显示:添加了
small = cv2.resize(img,(640,360)),并把显示语句改成cv2.imshow('Image',small),内存增长的幅度就变得小很多。 - 后来我在
imshow调用前加了continue语句,完全跳过图像显示的步骤,这时候内存占用基本保持稳定,没有明显的增长。 - 基于这些测试,我判断内存泄漏的问题应该是和
cv2.imshow函数直接相关的。
测试代码
下面是我用来复现问题的代码:
import cv2, numpy as np flag = False while True: img = np.zeros((2160,3840,3),np.uint8) if flag: img = cv2.circle(img, (1920,1080),128,(255,255,255),-1) flag = not flag cv2.imshow('Image',img) k = cv2.waitKey() cv2.destroyAllWindows() if k == 27: break
备注:内容来源于stack exchange,提问作者user2268171
相关产品推荐
相关产品推荐

