Привет всем и спасибо за множество полезных тем по stackoverflow — они мне очень помогли, так как я очень неопытный в программировании. В рамках проекта для университета я пытаюсь внести корректировку перспективы в визитные карточки, чтобы подготовить их для распознавания текста в C ++ с использованием библиотек OpenCV. Я обнаружил, что автоматическое определение углов с помощью Canny и Hough несколько ненадежно в зависимости от конкретной карты и фона, поэтому я хотел бы реализовать способ выбора углов вручную на данный момент.
Я нашел следующий код (OpenCVSelect.cpp) пользователем ajithsri на sourceforge ( http://sourceforge.net/p/opencvselmov/code/ci/master/tree/ ), что именно то, что мне было нужно. Однако, поиграв с ним в течение некоторого времени, он внезапно упал, что заставило меня заподозрить. Глядя на диспетчер задач, щелкая и перемещая точки, я заметил, что огромный объем памяти используется без освобождения, пока не произойдет сбой программы.
Теперь, как я уже сказал, я действительно неопытен, когда дело доходит до программирования, и я не смог найти, что не так с кодом, поэтому, пожалуйста, прости меня, если решение очевидно для вас.
Я был бы очень признателен, если бы кто-нибудь помог мне с проблемой памяти в коде, чтобы я мог использовать ее для своего проекта.
Спасибо!
(Необходимы библиотеки OpenCV и black.jpg)
Вот одна из проблем. Вы копируете огромное количество изображений и выпускаете только последнее.
void showImage(){
IplImage *img2=img0;
for(int j=0;j<nop;j++){
img2 = cvCloneImage(img2);
...
for(int k=j+1;k<nop;k++){
img2 = cvCloneImage(img2);
...
}
}
...
cvReleaseImage(&img2);
Удалить все эти звонки cvCloneImage()
и вместо этого изменить
IplImage *img2=img0;
в
IplImage *img2=cvCloneImage(img0);
Этот код написан так плохо, что, вероятно, есть множество других проблем.
findImg()
имеет аналогичную утечку выше.
Других решений пока нет …