3

この問題の処理方法を教えてください:

OpenCV エラー: 不明な関数のメモリ不足 (921604 バイトの割り当てに失敗)、ファイル ........\ocv\opencv\modules\core\src\alloc.cpp、52 行目

cv::cloneとを使用する私の方法の1つpointer

コードは次のとおりです。

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

clone()メソッドはcv::Mat、データのハード コピーを実行します。したがって、問題は、新しいイメージごとfilterhijau()に割り当てられ、このメソッドを何百回も呼び出した後、アプリケーションが数百 MB (GB ではない場合) を占有し、メモリ不足エラーがスローされることです。

現在のアプローチを再設計して、RAM メモリの占有量を減らす必要があるようです。

于 2013-02-15T13:31:49.677 に答える