java opencv内存不足错误如何解决?
Posted
技术标签:
【中文标题】java opencv内存不足错误如何解决?【英文标题】:How to resolve java opencv insufficient memory error? 【发布时间】:2020-12-21 10:48:19 【问题描述】:import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import java.util.Arrays;
public class Main
private static double getRGB(int i, int j)
Imgcodecs imageCodecs = new Imgcodecs();
Mat matrix = imageCodecs.imread("/Users/brand/Downloads/SPACE.JPG");
double rgbVal;
double rgb[] = matrix.get(i, j);
rgbVal = rgb[0] + rgb[1] + rgb[2];
rgbVal = rgbVal / 3;
return rgbVal;
public static void main(String[] args)
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Imgcodecs imageCodecs = new Imgcodecs();
Mat matrix = imageCodecs.imread("/Users/brand/Downloads/SPACE.JPG");
System.out.println("Image loaded");
System.out.println("Image size : " + matrix.width() + " x " + matrix.height());
double[][] rgb = new double[matrix.width()][matrix.height()];
for (int i = 0; i < matrix.width(); i++)
for (int j = 0; j < matrix.height(); j++)
rgb[i][j] = getRGB(i, j);
System.out.println(Arrays.deepToString(rgb));
当我运行我的程序时,它需要很长时间才能完成,最后返回此错误:
“线程“main”中的异常 CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.5.0) C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\ core\src\alloc.cpp:73: error: (-4:Insufficient memory) 无法在函数 'cv::OutOfMemoryError' 中分配 921600 字节 ]"
代码的目标是检索每个像素的 rgb 值,将它们加在一起,然后将它们除以 3 以获得每个像素的平均值。我怎样才能避免我收到的这个错误。感谢您的帮助。
【问题讨论】:
【参考方案1】:原因是因为在每次调用 getRGB 时都会再次加载图像......它会一次又一次地为 main 循环中的每个像素分配那些 921600 字节(可能是 640x480x3)。您必须将图像作为参数发送给函数,对 Mat 的引用,在 main 中创建,而不是每次都加载图像。
显然这些在 getRGB 中创建的实例不会被释放,并且内存负载会增长,直到您用完系统内存。 (根据您的操作系统使用任务管理器、htop 等观看它)
不是主要问题,但使用 double 有点过头了,值将是
【讨论】:
以上是关于java opencv内存不足错误如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
我出现内存不足错误,如何解决?Permgen 空间区域是啥意思?是啥原因造成的? [复制]
如何解决 J2ME 中的“应用程序因内存不足而意外退出”错误