我已经在图像识别程序上工作了一段时间,但是突然间我注意到当我对程序进行较长时间的测试时,函数cvLoadImage有时会停止返回图像。我没有看到明确的模式或时间,但是一旦失败,它将在其余程序中继续失败,直到我再次重启。该代码段仅偶尔运行一次以更新我的用户界面。

我的代码:

IplImage* UIframe = cvLoadImage("../images/background.jpg", CV_LOAD_IMAGE_COLOR);
if(UIframe) {
 //do stuff
} else {
 cout<<"Image not loaded"<<endl;
}
cvReleaseImage(&UIframe);

我发现cvLoadImage失败的原因有两个:
  • 该路径是静态的,并且在程序中的较早版本上工作,因此该文件在那里
  • 我释放了图像,并且没有其他内存泄漏导致此
  • 尝试加载时未更新.jpg
  • 我安装了所有正确的库,因为cvLoadImage可以在
  • 上运行

    一种解决方案是只加载一次图像并不断从内存中更新它,但是我想了解为什么会发生这种情况以及如何解决此问题。

    最佳答案

    您是否在使用最新的OpenCV(2.3.1)?

    需要注意的另一件事是//do stuff中的任何内容都可能会导致内存泄漏,并且一段时间后cvLoadImage()失败,因为您的系统根本没有足够的内存来加载新图像。

    事实是,有一个简单测试可以发现问题是否出在OpenCV 或您的代码中:编写一个最小的应用程序,该应用程序可以加载相同的图像N次。除了调用cvLoadImage()cvReleaseImage()之后,不要在循环内执行任何操作。

    如果此简单应用程序失败,则可能是OpenCV方面的问题。如果没有,您就知道自己在代码中做错了什么。

    关于c++ - cvLoadimage在运行时停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10312676/

    10-11 04:28