error: Unable to allocate 141. MiB for an array with shape (6000, 8192, 3) and data type bool
最近在捣腾瓷砖表检的代码,在把缺陷画到图片上来认识缺陷的时候,出现了以下问题,按照网上的教程没有解决问题,后来想起来内存不够的时候可以清楚图片缓存,于是找到了解决问题的思路,分享给大家~
环境:Window10, Visual Studio Code
error:Exception has occurred: _ArrayMemoryError Unable to allocate 141. MiB for an array with shape (6000, 8192, 3) and data type bool
本人总结了三种解决方案:
方案一:修改内存配置的方法(这种方法看上去挺有道理,但是我试了没有成功)
参考资料:https://blog.csdn.net/get_py/article/details/124187372
方案二:清除 plt 图片缓存的方法(试验过,可以解决问题)
1 from matplotlib import pyplot as plt
2 fig = plt.figure()
3 plt.figure().clear() # It is the same as clf
4 plt.close() # Close a figure window
5 plt.cla() # Clear the current axes
6 plt.clf() # Clear the current figure
添加后的代码如图所示:
参考资料:https://www.tutorialspoint.com/how-to-clear-the-memory-completely-of-all-matplotlib-plots
方案三:不使用画图 plt 函数 ,而是使用保存图片的函数,如 cv2.imwrite 函数将保存图片到本地,再查看结果。
这种方案就不会产生内存不足问题,但是要依照情况选择,如果不能通过保存图片的方法来查看你想要的结果,那就不能用这种方法。在本代码中,其实 plt 函数主要用在前期的调试,因为图片数量有5000多张,所以最终的结果查看还是要通过保存图片的方式,所以在用 plt 函数调式了之后,完全可以用 cv2.imwrite 函数把图片保存到本地查看运行结果,即可以把 plt.imshow(image) 注释即可解决这个问题。