Nawet samo wykonywanie najbardziej podstawowych strumieni wideo powoduje wyciek pamięci dla mnie.Przeciek pamięci OpenCV 2.1 na proste przesyłanie strumieniowe wideo w systemie Mac OSX
cvNamedWindow("1",0);
CvCapture *fc = cvCaptureFromCAM(0);
IplImage *frame = NULL;
CvSize frameSize;
frameSize.height = cvGetCaptureProperty(fc, CV_CAP_PROP_FRAME_HEIGHT);
frameSize.width = cvGetCaptureProperty(fc, CV_CAP_PROP_FRAME_WIDTH);
while (1) {
IplImage *wrkImage = NULL;
frame = cvQueryFrame(fc);
if (!frame)
break;
wrkImage = cvCreateImage(frameSize, IPL_DEPTH_8U, 3);
cvCopy(frame, wrkImage, NULL);
cvShowImage("1", wrkImage);
char c = cvWaitKey(33);
if (c == 27) {
break;
}
cvReleaseImage(&wrkImage);
}
Widocznie według książki „Learning OpenCV”, ja nie mam do wydania „ramkę” ponieważ jest zarządzany przez OpenCV i mogę „spodziewać się problemów, jeśli to zrobię”. Rzeczywiście powoduje problemy, jeśli zwolniam wskaźnik ramki po wywołaniu cvQueryFrame. Książka sugeruje również skopiowanie obrazu wskazanego przez cvQueryFrame gdzie indziej, aby pracować nad nim, ponieważ cvQueryFrame prawdopodobnie ponownie przetwarza ten sam kawałek pamięci wielokrotnie. Stąd wrkImage, który wydajemy na koniec każdego cyklu ramek. Program ulega awarii po kilku minutach i wycieka pamięć jak szalona! Prowadzi mnie do przekonania, że coś poważnego wycieka jak całe ramy. Zastanawiam się, czy ktokolwiek używa OpenCV 2.1 na Macu do filmów wideo i stwierdził, że jest to również problem. Albo, jeśli ktoś widzi w moim kodzie dziurę, której mi brakuje.
Każda rada guru OpenCV jest bardzo cenna!
Edytuj: Po uważnym przejściu programu i sprawdzeniu pamięci podejrzewam, że problem dotyczy cvShowImage(). Wygląda na to, że cvShowImage przydziela pamięć o wartości pamięci RAM, która nigdy nie zostanie odzyskana. Następnie znalazłem ten link OpenCV cvShowImage Memory Leaks OSX, który wydaje się zgadzać z moimi podejrzeniami. Może być tu blisko rozwiązania ... Cieszę się, że nie jestem szalona!
AKTUALIZACJA: Macports OpenCV jest już w porządku (i już od kilku miesięcy.) Pomyślałem, że powinienem opublikować to tutaj, aby ludzie nie byli zniechęcani do używania Macportów do ich kompilacji/instalacji OpenCV. sposób zainstalować OpenCV.
Och i używam instalacji Mac Ports z OpenCV 2.1, którą zainstalowałem 2 tygodnie temu – wallacer