Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Computer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++, OpenCV - pobieraniei obróbka obrazu z kamerki, wyciek pamięci

16 Lut 2016 21:15 696 3
  • Poziom 2  
    Witam. Piszę krótkie programy w celu nauki wykorzystania biblioteki OpenCV, w celu wykorzystania jej w pracy inżynierskiej. OpenCV służy głównie do obróbki obrazu, wykrywania twarzy, krawędzi na obrazie itp.
    Poniższy program napisany jest na podstawie przykładów w tutorialach. Generalnie działa - w każdym obrocie pętli pobierany jest obraz z kamerki internetowej, tworzymy klona oryginalnego obrazu, przerabiamy go na czarnobiały i wyświetlamy oba obrazy.
    Otworzyłem menagera zadań, okazało się że program zajmuje coraz więcej pamięci RAM(wyciek pamięci?). Wiem że problem mieści się w funkcji przerabiającej obraz, a właściwie w tym że prawdopodobnie przy każdym wykorzystaniu tej funkcji, tracę dostęp do obszaru pamięci zarezerwowanego przeze mnie na potrzeby funkcji.
    Funkcja przyjmuje wskaźnik na IplImage jako obraz oryginalny. Do celów przeróbki, musze stworzyć osobny obiekt struktury "IplImage*"(cały czas operujemy na wskaźnikach, to działa). Próbowałem to zrobić na 3 sposoby(funkcja1-3), ale żaden nie działa. Proszę Was o pomoc, jak prawidłowo przekazywać do funkcji obiekt "IplImage*" i jak prawidłowo taki obiekt zwrócić (przez return lub poprzez argument funkcji), oraz jak po sobie posprzątać. Z góry dziękuję za pomoc ;)

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Computer Controls
  • Poziom 29  
    Witam

    W Borland C++ Builder masz narzędzie codeguard które pomaga zapanować nad wyciekami z pamięci. Sądzę że może Ci się przydać nie tylko teraz ale i w przyszłości.
  • Computer Controls
  • Poziom 24  
    Problem polega na tym, że w każdej iteracji pętli alokujesz nową pamięć:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Za każdym razem wskaźnik *img wskazuje inny obszar pamięci.
    Efekt jest taki, że po każdej iteracji pozostawiasz zaalokowany obszar pamięci na który nie wskazuje żaden wskaźnik.
  • Poziom 2  
    Hyde911 napisał:
    Problem polega na tym, że w każdej iteracji pętli alokujesz nową pamięć:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Za każdym razem wskaźnik *img wskazuje inny obszar pamięci.
    Efekt jest taki, że po każdej iteracji pozostawiasz zaalokowany obszar pamięci na który nie wskazuje żaden wskaźnik.



    W jaki sposób więc usuwać ten obszar pamięci którego zamierzam nie używać, a na który wskazuje wskaźnik img? Gdy próbowałem przed linią:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    wstawić:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    kompilator wyrzucał błąd.