-4
我在做this example。我遇到的問題是應用程序的內存消耗,它在180秒內開始大約在30秒內達到1.5 GB。釋放OpenCV :: VideoCapture的內存(或正確使用cvRelease)
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
「以下工作正確的是非,把它發送「...什麼? – genpfault 2012-02-20 21:20:39
如果arr是使用new分配的,你真的可以調用cvRelease(&arr)嗎?你不應該調用delete _arr(或_img)嗎? – 2012-02-20 21:36:33
試過刪除arr;同樣的問題,例外:cv ::內存位置的異常 – JohnnyAce 2012-02-20 22:36:32