【发布时间】:2012-02-20 20:49:38
【问题描述】:
我正在做this example。我遇到的问题是应用程序的内存消耗,它从大约 180 mb 开始在 30 秒内上升到 1.5 GB。
void VideoCaptureCV::update()
{
cap >> frame; // cap is cv::VideoCapture
if(_img == 0)
{
_img = new CvMat(frame);
}
CvArr *arr = _img;
CvMat *arrMat, *cvimage, stub;
arrMat = cvGetMat(arr, &stub);
cvimage = cvCreateMat(arrMat->rows, arrMat->cols, CV_8UC3);
cvConvertImage(arrMat, cvimage, 0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex_uid);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, cvimage->cols, cvimage->rows,0, GL_BGR, GL_UNSIGNED_BYTE, cvimage->data.ptr);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
w = cvimage->cols;
h = cvimage->rows;
// non of the following works correctly, it sends
// exception: cv::Exception at memory location
//cvRelease(&arr);
//cvReleaseMat(&arrMat);
//cvReleaseMat(&cvimage);
//cvReleaseMat(&stub);
}
知道如何正确使用 cvRelease 吗?
编辑1:添加使用cvRelease时的错误发送
【问题讨论】:
-
“以下非正常工作,它发送”...什么?
-
如果arr是用new分配的,你真的可以调用cvRelease(&arr)吗?你不应该调用 delete _arr (or _img) 吗?
-
尝试删除 arr;同样的问题,异常: cv::Exception at memory location
-
简单的答案:不要将 C 与 C++ 混合使用,也不要将 C++ 接口用于图像,而不仅仅是用于视频捕获。
-
感谢我尝试过并且工作得更好
标签: c++ opencv opengl memory-management