C++ cvLoadimage在运行时停止工作

C++ cvLoadimage在运行时停止工作,c++,linux,opencv,C++,Linux,Opencv,我已经在一个图像识别程序上工作了一段时间,但突然我注意到,当我测试我的程序更长时间时,函数cvLoadImage有时会停止返回图像。我看不出发生这种情况的明确模式或时间,但一旦失败,它将在程序的其余部分继续失败,直到我重新启动。这段代码只是偶尔运行一次以更新我的用户界面 我的代码: IplImage* UIframe = cvLoadImage("../images/background.jpg", CV_LOAD_IMAGE_COLOR); if(UIframe) { //do stuff

我已经在一个图像识别程序上工作了一段时间,但突然我注意到,当我测试我的程序更长时间时,函数cvLoadImage有时会停止返回图像。我看不出发生这种情况的明确模式或时间,但一旦失败,它将在程序的其余部分继续失败,直到我重新启动。这段代码只是偶尔运行一次以更新我的用户界面

我的代码:

IplImage* UIframe = cvLoadImage("../images/background.jpg", CV_LOAD_IMAGE_COLOR);
if(UIframe) {
 //do stuff
} else {
 cout<<"Image not loaded"<<endl;
}
cvReleaseImage(&UIframe);
IplImage*UIframe=cvLoadImage(“../images/background.jpg”,CV\u LOAD\u IMAGE\u COLOR);
如果(UIframe){
//做事
}否则{

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

您还应该在释放UIframe后将其设置为NULL。释放UIframe很好,但在执行NULL分配之前,甚至可能会有一个bug导致问题,谁知道呢??)


这将确保您的文件不会保留任何内容以备不时之需。请继续阅读此内容以了解更多说明。

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

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

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


如果这个简单的应用程序失败,这可能是OpenCV方面的一个问题。如果没有,你就知道你的代码有问题。

我的程序在运行时没有更改工作目录,正如我提到的,该程序可以在几分钟内很好地加载图像并加载图像……但过了一段时间,它就停止这样做了,我不知道我没有使用最新版本的openCV,因为在我开始这个项目时,2.2是最新版本。我尝试了你的简单测试,得出了预期的结论,openCV或从硬盘加载图像没有问题。我还测试了我的//do stuff部分是否存在内存泄漏,似乎没有内存问题。agr请注意可能的内存泄漏