cvLoadimage 在运行时停止工作

cvLoadimage stops working during run time

本文关键字:停止工作 运行时 cvLoadimage      更新时间:2023-10-16

我已经在图像识别程序上工作了一段时间,但突然我注意到,当我测试程序较长时间时,函数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方面的问题。如果没有,您就知道您在代码中做错了什么。

当你

决定使用相对路径时要小心,你最好仔细检查你的工作目录。 这就是执行.exe的地方。或者说你的程序在运行时是否在更改工作目录?

释放 UIframe 后,您还应该将它设置为 NULL。发布它很好,但甚至可能有一个错误在 NULL 分配之前确实会导致问题,谁知道呢?:)

这将确保没有任何内容保留您的文件以防万一。阅读有关SO的此问题以获取更多解释。