SiftDescriptorExtractor вызывает утечку памяти - PullRequest
3 голосов
/ 02 августа 2011

В настоящее время я использую SIFT для извлечения характерных точек из изображения и заметил, что у меня возникает утечка памяти при получении дескрипторов. Можно ли как-нибудь освободить память, которая может быть прикреплена в классе?

EDIT Добавлено больше деталей в блок кода

cv::SiftFeatureDetector* features = new cv::SiftFeatureDetector();
cv::SiftDescriptorExtractor* extractor = new cv::SiftDescriptorExtractor();

std::vector<cv::KeyPoint> KeyPoints;
cv::Mat Descriptors;

// Turn the image into a Mat
cv::Mat mImage = cv::Mat(iplImage);

printf("Searching for keypoints in: %s.\n", szName.c_str());

// Detect keypoints
features->detect(mImage, KeyPoints);

printf("Found %d keypoints.\n", KeyPoints.size());

// Extract descriptors
extractor->compute(mImage, KeyPoints, Descriptors);

printf("Found %d descriptors.\n\n", Descriptors.rows);

// Let my memory go!
delete extractor;
delete features;

Любой совет с благодарностью. Спасибо.

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Вы правы .Я только что протестировал на Linux с OpenCV 2.3, и на compute() действительно есть утечка памяти.Это влияет на SiftDescriptorExtractor и, возможно, на другие типы, например SurfDescriptorExtractor , OrbDescriptorExtractor и BriefDescriptorExtractor .

Кстатине забудьте cvReleaseImage() изображение, которое вы называете iplImage в конце этого кода.

0 голосов
/ 06 августа 2011

Работая с 2.3 тоже, а также испытывают утечки памяти с SiftDescriptorExtractor. Однако другие экстракторы дескрипторов не имеют этой проблемы. Предлагаю создать тикет в багтрекер для информирования разработчиков.

...