3

请帮助如何处理这个问题:

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

2 回答 2

3

a的clone()方法cv::Mat执行数据的硬拷贝。所以问题在于,每filterhijau()分配一个新图像,在数百次调用此方法后,您的应用程序将占用数百 MB(如果不是 GB),从而引发内存不足错误。

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

于 2013-02-15T13:31:49.677 回答
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()

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

于 2020-11-14T14:01:54.093 回答