簡體   English   中英

如何修復內存不足錯誤(openCV)

[英]How to fix the insufficient memory error (openCV)

請幫助如何處理這個問題:

OpenCV 錯誤:未知函數中的內存不足(無法分配 921604 字節),文件 ........\\ocv\\opencv\\modules\\core\\src\\alloc.cpp,第 52 行

我使用cv::clonepointer

代碼是:

每100ms有一個定時器; 在定時器事件中,我調用這個方法:

void DialogApplication::filterhijau(const Mat &image, Mat &result) {   
   cv::Mat resultfilter = image.clone();

   int nlhijau = image.rows;

   int nchijau = image.cols*image.channels();;

    for(int j=0; j<nlhijau; j++) {
       uchar *data2=resultfilter.ptr<uchar> (j);  //alamat setiap line pada result
       for(int i=0; i<nchijau; i++) {
          *data2++ = 0;       //element B
          *data2++ = 255;     //element G  
          *data2++ = 0;       //element R
       }
     //  free(data2);   //I add this line but the program hung up
   }

   cv::addWeighted(resultfilter,0.3,image,0.5,0,resultfilter);
   result=resultfilter;
}

cv::Matclone()方法執行數據的硬拷貝。 所以問題是,為每個filterhijau()分配了一個新圖像,在數百次調用此方法后,您的應用程序將占用數百 MB(如果不是 GB),從而引發Insufficient Memory錯誤。

似乎您需要重新設計當前的方法,以便它占用更少的 RAM 內存。

我之前遇到過這個錯誤,我通過在閱讀圖像減小圖像的大小並犧牲一些分辨率來解決它。

在 Python 中是這樣的:

# Open the Video 
cap = cv2.VideoCapture(videoName + '.mp4')
i = 0
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    frame = cv2.resize(frame, (900, 900))
    # append the frames to the list
    images.append(frame)
    i += 1
cap.release()

NB我知道這不是解決問題的最佳解決方案,但是對我來說已經足夠了。

暫無
暫無

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

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