Incluso el simple hecho de la transmisión de video más básica provoca una pérdida de memoria.OpenCV 2.1 Fuga de memoria en la transmisión de video simple en 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);
}
Al parecer, según el libro "Learning OpenCV", supone que no puedo liberar "marco", ya que está gestionado por OPENCV y puedo "esperar problemas si lo hago". Ciertamente causa problemas si lanzo el puntero de marco una vez que he llamado a cvQueryFrame. El libro también sugiere copiar la imagen apuntada por cvQueryFrame en otro lugar para trabajar en ella, ya que cvQueryFrame presumiblemente recicla el mismo fragmento de memoria repetidamente. De ahí que wrkImage lo libere al final de cada ciclo de cuadro. ¡El programa falla después de unos minutos, y pierde la memoria como una locura! Me lleva a creer que algo importante se está filtrando como marcos enteros. Me pregunto si alguien usa OpenCV 2.1 en Mac para material de video y también ha descubierto que esto es un problema. O si alguien puede ver un agujero en mi código que me falta.
¡Se agradecerán todos los consejos de OpenCV guru!
Editar: Después de pasar cuidadosamente por el programa y examinar la memoria, sospecho que el problema es con cvShowImage(). cvShowImage parece asignar aproximadamente una memoria de marco que nunca parece recuperarse. Luego encontré este enlace OpenCV cvShowImage Memory Leaks OSX que parece estar de acuerdo con mis sospechas. Podría estar cerca de una solución aquí ... ¡Me alegra ver que no estoy loco!
ACTUALIZACIÓN: El OpenCV de Macports está bien ahora (y lo ha sido durante unos meses. Solo pensé que debería publicarlo aquí para que la gente no se desanime de usar macports para su compilación/instalación de OpenCV. Macports es un gran manera de instalar OpenCV.
Oh y estoy usando una instalación de Mac Ports de OpenCV 2.1 que instalé hace 2 semanas – wallacer