【发布时间】:2018-05-20 21:25:58
【问题描述】:
我在 RaspberryPi 上运行 OpenCV 并使用 OpenCVs C 接口。
我需要调整来自网络摄像头的图像尺寸,因此我使用了cvResize() 函数。
它工作正常,但是几秒钟后我的内存用完了,因为我在 while(1)-Loop 中执行代码并阅读了其他人遇到此问题的信息,我怀疑内存泄漏。
这是我的代码:
IplImage *frame;
IplImage *frameRaw;
main() {
CvCapture *capture = cvCreateCameraCapture(-1);
while (1) {
frameRaw = cvQueryFrame(capture);
frame = cvCreateImage(cvSize(WIDTH, HEIGHT), frameRaw->depth, frameRaw->nChannels);
cvResize(frameRaw, frame, 0); // 0 = CV_INTER_NEAREST
// Do something with "frame"
}
}
我已经尝试使用cvReleaseImage(&frameRaw)(或&frame)在每次迭代结束时释放保留的内存,但这总是会导致分段错误。使用cvReleaseImageHeader() 不会导致分段错误,但也不会释放任何内存。
我还尝试通过cvSetCaptureProperty() 更改帧的捕获分辨率,但没有任何效果。
有人可以帮我理解这里出了什么问题吗?
提前致谢
【问题讨论】:
-
您是否在使用其他库?我在任何地方都找不到 cvFreeImage 或 cvFreeImageHeader。你是说 cvReleaseImage() 吗?
-
您显示的代码肯定缺少
cvReleaseImage调用,与cvCreateImage一起使用——您总是分配,从不取消分配。此外,您不应该取消分配frameRaw,cvQueryFrame的文档明确提到了这一点。 -
@bennji_of_the_overflow 你说得对,我的意思是
cvReleaseImage(),对我来说似乎为时已晚...... -
非常感谢@DanMašek 似乎只是在每次迭代解决问题后使用
cvReleaseImage(&frame)
标签: c opencv memory memory-leaks