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

标签 c++ opencv

请帮忙解决这个问题:

OpenCV Error: Insufficient memory (Failed to allocate 921604 bytes) in unknown function, file ........\ocv\opencv\modules\core\src\alloc.cpp, line 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),从而抛出 内存不足错误。

看来您需要重新设计当前的方法,以使其占用更少的 RAM 内存。

关于c++ - 如何修复内存不足错误(openCV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14888431/

相关文章:

c++ - OpenCV Mat 中的动态内存释放错误

opencv - OpenCV相机校准的数学背景

opencv - 使用 OpenCV 寻找戴某种帽子的人

c++ - 异常抛出 : Access violation reading location in VS 2012.(在 VS2010 中没有)

c++ - 如何直接从分配的内存中执行 mmaped 二进制/代码

c++ - 代码 C++ 中的动态多态性错误

c# - 如何正确释放OpenCvSharp.Mat的内存?

c++ - 如何在 QPixmap 上应用深色 mask 层?

c++ - mips装配中的递归斐波那契函数

python - 使用欧氏距离计算 2 个直方图之间的距离