【Opencv学习(二)】内存溢出和内存泄漏总结

内存溢出原因总结:

1. 图像载入路径出错。 在Opencv中,图像载入路径用双斜杠,例如:"D: \\ my_image.jpg".

2. 如果确认图像载入路径完全正确,那么应该考虑载入图片的深度,是什么样的图像类型。具体的类型应该是和你下面所用到的函数有关,一般而言,函数所需的输入图像格式应该和你载入的图像格式一致,否则也会出现内存溢出。

3. 在写读大量图片时,例如:发现在读到第721张时,内存溢出了,无法继续读。

    出错语句为pframe2 = cvLoadImage(pname2);

    后来加上了ReleaseImage(&pname2); 问题修正。

4. opencv 获取 ROI 时没有 clone引发的内存泄漏。

在图像上获取一个 roi 区域

cv::Mat img = imread('D:\\test.jpg');
cv:: Rect rect(top_x,top_y, width, height);
cv::Mat roi = img(rect);

如果roi没有被及时释放,这个操作会使得 img 也无法被释放,因此会导致内存泄漏。之前因为贪图节省 clone 这一段小时间而不使用 clone,导致了程序引发内存泄漏,而且这个错误很难被排查到。保险的用法就是在任何时刻都加上 clone().

cv::Mat roi = img(rect).clone();

建议使用C++接口的Opencv,内存问题会少很多

你可能感兴趣的:(Opencv)