如何修复内存不足错误(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;
}

cv::Matclone()方法执行数据的硬拷贝。因此,问题是为每个filterhijau()分配一个新的映像,在对该方法进行数百次调用后,您的应用程序将占用数百MB(如果不是GB的话),从而引发内存不足错误。

看起来你需要重新设计你目前的方法,这样它占用的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()

N。B.我知道这不是这个问题的最佳解决方案,但对我来说已经足够了

相关内容

  • 没有找到相关文章

最新更新