저는 OpenCV를 RaspberryPi에서 실행 중이며 OpenCVs C 인터페이스를 사용하고 있습니다.OpenCV가 메모리를 누설합니다 (cvResize, cvCreateImage)
웹캠에서 이미지의 크기를 조정해야하므로 cvResize()
기능을 사용했습니다.
잘 작동하지만 몇 초 후에 메모리가 부족합니다. 코드를 while(1)
안에 실행하고 있기 때문에이 문제가있는 다른 사람들에 대해 읽었을 때 메모리 누출이 의심됩니다.
IplImage *frame;
IplImage *frameRaw;
main() {
CvCapture *capture = cvCreateCameraCapture(-1);
while (1) {
frameRaw = cvQueryFrame(capture);
frame = cvCreateImage(cvSize(WIDTH, HEIGHT), frameRaw->depth, frameRaw->nChannels);
cvResize(frameRaw, frame, 0); // 0 = CV_INTER_NEAREST
// Do something with "frame"
}
}
가 이미 cvReleaseImage(&frameRaw)
(또는 &frame
)를 사용하여 각 반복의 끝에서 예약 된 메모리를 해제하려고하지만 항상 분할 오류가 발생했습니다 :
여기 내 코드입니다. cvReleaseImageHeader()
을 사용하면 세그먼트 화 오류가 발생하지 않았으며 메모리를 해제하지도 않았습니다.
또한 프레임의 캡쳐 해상도를 cvSetCaptureProperty()
을 통해 변경하려고했지만 아무 것도하지 않았습니다.
누군가가 나를 어떻게 이해할 수 있습니까? 미리
감사 I는 솔루션을 발견 @ DanMašek에
당신은 추가 라이브러리를 사용하고 있습니까? 어디서나 cvFreeImage 또는 cvFreeImageHeader를 찾을 수 없습니다. cvReleaseImage()를 의미합니까? –
당신이 보여주는 코드는 확실히'cvReleaseImage' 호출이 빠졌습니다.'cvCreateImage'와 함께 - 당신은 언제나 할당하지 않습니다. 할당하지 마십시오. 또한,'frameRaw'의 할당을 해제해서는 안되며,'cvQueryFrame'의 문서에서 명시 적으로 언급하고 있습니다. –
@bennji_of_the_overflow 네 말이 맞아, 나는'cvReleaseImage()'가 너무 늦은 것 같아서 ... – Panni