cvLoadimage 在运行时停止工作
cvLoadimage stops working during run time
我已经在图像识别程序上工作了一段时间,但突然我注意到,当我测试程序较长时间时,函数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的此问题以获取更多解释。
相关文章:
- 程序在 Visual Studio 中停止运行时终止
- 当循环在条件C++之前停止工作时
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- Vscode 自动格式化代码在运行几次后停止工作
- 程序 使用链表插入数据时停止工作
- 当我尝试输入时程序停止工作
- C++参数化构造函数使代码在传递大输入时停止工作
- circle.exe 在代码块中使用 graphics.h 时停止工作
- 如何使功能"run"工作。程序在调用运行时退出
- 是否有一种方法可以在运行时停止循环重复一次不止一次
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- C++放置位置删除如何在内部(C++运行时)工作?如何克服其局限性?
- 该程序在执行时停止工作.我在代码块中制作了这个程序
- 运行时停止工作
- 从 WebAPI 项目运行静态类时出现 StackOverflow 异常 - 从控制台应用程序运行时工作正常
- 每当我尝试运行此代码时,断裂出现或停止工作
- 当运行程序时,它说程序.exe停止工作
- 导致运行反向字符串程序时停止工作
- cvLoadimage 在运行时停止工作
- 代码中没有错误,但是当我运行程序时,我得到“多项式.exe已停止工作”.错误