簡體   English   中英

如何解決 java opencv memory 不足錯誤?

[英]How to resolve java opencv insufficient memory error?

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));
}
}

當我運行我的程序時,它需要很長時間才能完成,最后返回此錯誤:

“線程“主”中的異常 CvException [org.opencv.core.CvException:cv::Exception: OpenCV(4.5.0) C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\core\s \alloc.cpp:73: 錯誤: (-4:Insufficient memory) 無法在 function 'cv::OutOfMemoryError' 中分配 921600 字節]"

代碼的目標是檢索每個像素的 rgb 值,將它們加在一起,然后將它們除以 3 以獲得每個像素的平均值。 我怎樣才能避免我收到的這個錯誤。 我很感激任何幫助。

原因是因為在每次調用 getRGB 時,您都會再次加載圖像......它會一次又一次地為 main 循環中的每個像素分配那些 921600 字節(可能是 640x480x3)。 您必須將圖像作為參數發送到 function,這是對在 main 中創建的 Mat 的引用,而不是每次都加載圖像。

顯然,在 getRGB 中創建的這些實例並未發布,並且 memory 負載會增長,直到您用完系統 memory。 (根據您的操作系統使用任務管理器、htop 等觀看)

不是主要問題,但使用 double 是一種矯枉過正,值將是 <=255,integer 除法和字節也足夠 IMO。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM