我正在开发一个程序,使用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