- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 RaspberryPi 上运行 OpenCV 并使用 OpenCVs C 接口(interface)。
我需要调整网络摄像头图像的尺寸,因此我使用了 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()
更改帧的捕获分辨率,但没有任何作用。
有人可以帮助我了解这里出了什么问题吗?
提前致谢
最佳答案
感谢@DanMašek,我找到了解决方案:
在每次 while
循环迭代之后,必须释放为帧分配的内存。这可以使用 cvReleaseImage(&frame)
来完成。
完整的代码现在是这样的:
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(&frame);
}
}
关于c - OpenCV 泄漏内存(cvResize、cvCreateImage),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47683755/
嗨,我实际上需要在 OpenCV 库中创建一个类似于 CvcreateImage() 的函数,它可以创建 IplImage 以外的数据类型的图像(例如 Unsigned char 或类似 IplIma
我在 RaspberryPi 上运行 OpenCV 并使用 OpenCVs C 接口(interface)。 我需要调整网络摄像头图像的尺寸,因此我使用了 cvResize() 函数。 它工作正常但几
来自 OpenCV 新手的非常基本的问题。我只想创建一个每个像素都设置为 0(黑色)的图像。我在 main() 函数中使用了以下代码: IplImage* imgScribble = cvCreate
有没有c++ opencv接口(interface)可以对这两个函数做同样的操作? 你好,我其实就是这样使用这两个函数的 IplImage *image; ARUint8 *dataPtr; // u
我试着在我的MS vs Codes 2022社区版本中构建一个代码片段。我配置了使用OpenCV中的功能所需的所有东西。但是,我得到了一组错误。我所做的配置如下所述。。。。错误:
我是一名优秀的程序员,十分优秀!