私は、Android NDKを使用してフルカラーのカメラ写真の画像処理を行うプログラムに取り組んでいます。したがって、明らかにメモリ使用量は大きな問題です。opencv 2.0でMatを明示的にリリース
私はMatの内容をもう必要としない時があります - 範囲外になったときに自動的に解放されることは知っていますが、早くリリースする良い方法がありますメモリ使用量を減らす?
現在、私のGalaxy S IIでは正常に動作していますが、これは古い携帯電話の多くの機能を代表するものではありません。
私は、Android NDKを使用してフルカラーのカメラ写真の画像処理を行うプログラムに取り組んでいます。したがって、明らかにメモリ使用量は大きな問題です。opencv 2.0でMatを明示的にリリース
私はMatの内容をもう必要としない時があります - 範囲外になったときに自動的に解放されることは知っていますが、早くリリースする良い方法がありますメモリ使用量を減らす?
現在、私のGalaxy S IIでは正常に動作していますが、これは古い携帯電話の多くの機能を代表するものではありません。
は、あなたがこのトリックを行うことができます。複数のマットは、あなたのデータを指している場合
Mat img = imread("myImage.jpg");
// do some operations
img = Mat(); // release it
を、何をすべきやるそれらのすべて
Mat img = imread("myImage.jpg");
Mat img2 = img;
Mat roi = img(Rect(0,0,10,10));
// do some operations
img = Mat(); // release all of them
img2 = Mat();
roi = Mat();
それともブルドーザーのアプローチを使用を解放することである:(?あなたはよろしいです、これはあなたのコードのバグを挿入するように聞こえる)
Mat img = imread("myImage.jpg");
Mat img2 = img;
Mat roi = img(Rect(0,0,10,10));
// do some operations
char* imgData = (char*)img.data;
free[] imgData;
imshow("Look, this is called access violation exception", roi);
Mat :: release()はこのトリックを行う必要があります。
CF:あなたのデータを指している唯一の行列を使用している場合OpenCV Memory Management Documentation
ありがとう、私はまだこれを試してみてくださいが、それは良いアプローチのようですね! – Jords
最初の2つは "foo = Mat();" "foo.release();"で?私は3番目のコードを実行するコードを見て泣くだろう。 ;) – cape1232