我已经在图像识别程序上工作了一段时间,但是突然间我注意到当我对程序进行较长时间的测试时,函数cvLoadImage有时会停止返回图像。我没有看到明确的模式或时间,但是一旦失败,它将在其余程序中继续失败,直到我再次重启。该代码段仅偶尔运行一次以更新我的用户界面。
我的代码:
IplImage* UIframe = cvLoadImage("../images/background.jpg", CV_LOAD_IMAGE_COLOR);
if(UIframe) {
//do stuff
} else {
cout<<"Image not loaded"<<endl;
}
cvReleaseImage(&UIframe);
我发现cvLoadImage失败的原因有两个:
一种解决方案是只加载一次图像并不断从内存中更新它,但是我想了解为什么会发生这种情况以及如何解决此问题。
最佳答案
您是否在使用最新的OpenCV(2.3.1)?
需要注意的另一件事是//do stuff
中的任何内容都可能会导致内存泄漏,并且一段时间后cvLoadImage()
失败,因为您的系统根本没有足够的内存来加载新图像。
事实是,有一个简单测试可以发现问题是否出在OpenCV 或您的代码中:编写一个最小的应用程序,该应用程序可以加载相同的图像N次。除了调用cvLoadImage()
和cvReleaseImage()
之后,不要在循环内执行任何操作。
如果此简单应用程序失败,则可能是OpenCV方面的问题。如果没有,您就知道自己在代码中做错了什么。
关于c++ - cvLoadimage在运行时停止工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10312676/