如何修复内存不足错误(openCV)

时间:2013-02-15 04:50:03

标签: c++ opencv

请帮助解决此问题:

  

OpenCV错误:内存不足(无法分配921604字节)   未知功能,文件   ........ \ ocv \ opencv \ modules \ core \ src \ alloc.cpp,第52行

使用cv::clonepointer

的方法之一

代码是:

每100毫秒有一个计时器; 在计时器事件中,我称之为:

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

2 个答案:

答案 0 :(得分:3)

clone()的{​​{1}}方法执行数据的硬拷贝。所以问题在于每个cv::Mat分配一个新映像,并且在数百次调用此方法之后,您的应用程序将占用数百MB(如果不是GB),从而抛出内存不足错误。

您似乎需要重新设计当前的方法,以便占用更少的RAM内存。

答案 1 :(得分:0)

我以前遇到过这个错误,我通过在阅读图像时减小图像尺寸并减小分辨率来解决它。

在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()

我知道这不是解决问题的最佳方法,但是对我来说就足够了。