我正在開發一個程序,使用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()應該可以做到。
謝謝,我還沒有嘗試過,但它似乎是一個很好的方法! – Jords 2012-01-28 09:10:22
前兩個不同於替換每個「foo = Mat();」與「foo.release();」?我會哭泣看代碼做第三個。 ;) – cape1232 2012-02-06 19:44:40