cvrelease удаляет выделенную память? - PullRequest
2 голосов
/ 27 октября 2010

Это может быть неправильный способ, но я передаю массив из LabView в свою функцию C ++ как простой массив char. Затем я создаю изображение OpenCV и указываю указатель на мои данные, которые были переданы. В конце функции я использую cvReleaseImage для удаления всех изображений OpenCV, это удалит данные из моего исходного указателя?

также, есть ли лучший способ выполнить операцию на месте, которая изменяет исходное изображение?

EXPORT void smoothImg(uchar * the_img, int size_x, int size_y)
{
 CvSize size;
 size.height = size_y ;
 size.width = size_x;

 IplImage * img1 = cvCreateImageHeader(size, IPL_DEPTH_8U, 1);
 img1->imageData = (char *)the_img;
 img1->imageDataOrigin = img1->imageData;

 IplImage * img2 = cvCreateImage(size, IPL_DEPTH_8U, 1);
// this is because I want my end result to be in img1 (same data as my the_img
 memcpy(img2->imageData,img1->imageData,sizeof(char)*size_x*size_y);

 cvSmooth(img2,img1,CV_BLUR, 5,5);

 cvReleaseImage(&img1 );
 cvReleaseImage(&img2 );

}

Примечание: кажется, что это не влияет на мои изображения, так как результаты правильные, но я хочу убедиться, что это правильно, прежде чем поместить его повсюду

Спасибо!

Ответы [ 2 ]

4 голосов
/ 27 октября 2010

cvRelease освобождает память, используемую изображением, поэтому после вызова вы больше не можете ссылаться на это изображение.

НО - память может быть недоступна для других программ, пока не существует openCV, это зависит от системы какобрабатывает память, и действительно, когда система возвращает свободную память для других приложений.

edit: Извините, я действительно не ответил на ваш вопрос.Есть флаг, который вы можете передать cvCreateImage (), чтобы сказать - у меня есть память, не удаляйте ее.Флаг немного зависит от того, какая у вас версия opencv

1 голос
/ 11 ноября 2010

На самом деле я нашел довольно интересную статью о выделении / освобождении памяти для OpenCV, я думаю, это означает, что я должен был использовать cvReleaseImageHeader, поскольку пытался удалить только заголовок.

http://www.andol.info/hci/963.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...