ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [라이프 사이클] C++, Python, OpenCV의 라이프 사이클 정리 및 장단점 비교
    Programming/Computer Science 2023. 6. 15. 20:16

    C++의 라이프 사이클

    1. 자원 할당 동적으로 할당되는 메모리나 파일 핸들링. new연산자를 사용해서 동적으로 메모리를 할당하거나 파일 i/o 클래스를 사용한다.
    2. 자원 사용 할당된 자원으로 작업을 수행한다. 동적으로 할당된 메모리에 데이터를 저장하거나 파일 데이터를 읽고 쓴다.
    3. 자원 해제 할당된 자원을 더 이상 사용하지 않으면 명시적으로 자원을 해제하여 반환한다. 메모리 누수를 방지하기 위함이다. delete 연산자나 close() 함수 등의 소멸자를 사용하여 자원을 해제한다.
    4. 프로그램 종료 프로그램이 종료될 때 할당된 자원은 운영체제에 반환된다. C++의 경우 main()함수가 반환되면 프로그램이 종료되고 이 때 자원이 자동으로 해제 된다.

     

     

    python의 라이프 사이클

    1. 파이썬 프로그램이 시작되면 코드의 위에서부터 아래로 순차적으로 실행된다.
    2. 프로그램에서 필요한 모듈들을 임포트 한다.
    3. 전역 변수가 초기화된다.
    4. 메인 함수
    if __name__ == "__main__":

       5. 프로그램이 실행되면서 입력을 받거나 파일을 읽고 데이터를 처리한다. 다른 함수나 클래스를 호출하기도 한다.

       6. 프로그램이 종료 된다.

     

    OpenCV (영상처리 작업)의 라이프사이클

    1. 초기화
      프로그램에서 OpenCV 소스들을 초기화 한다. 사용할 자원에 대해 할당하고 초기 설정을 한다. 예를들어, cv::Mat(); 등으로 이미지를 초기화 할 수 있다.
    2. 영상 불러오기
      영상을 불러오거나 , 캡처를 하여 영상을 불러온다. cv::imread()
    3. 영상 처리
      다양한 OpenCV함수를 이용하여 목적에 맞는 영상 처리를 진행한다. 필터링, 이미지 변환, 검출, 색상공간 별환 등의 작업을 수행한다.
    4. 결과 표시
      imshow()나 imwrite()등의 함수를 이용하여 영상처리된 결과를 표시 또는 저장한다.
    5. 자원 반환
      cv::destroyAllWinodows()를 이용하여 창을 모두 종료하거나, cv::release()를 이용하여 비디오 관련 자원 메모리를 해제한다.
    6. 종료

     

     

     

     

     

     

    각 언어나 라이브러리 라이프 사이클의 장단점 비교

    C++

    장점

    직접적으로 메모리 할당과 제어가 가능하다. 메모리 사용량 최적화가 가능하다.

    파이썬에 비해 실행 속도가 빠르다.

    단점

    다른 언어에 비해 복잡하고 어렵다.

    메모리 관리를 잘 해주어야 한다.

    개발 시간이 더 오래 걸릴 수 있다.

     

     

     

    Python

    장점

    쉽고 빠르게 개발이 가능하다. 간결한 코드 작성이 가능하다.

    가비지 컬렉션을 통해 자동으로 메모리가 관리된다.

    타입을 명시하지 않아도 된다.

    다양한 라이브러리와 모듈을 편리하게 사용할 수 있다.

    그래서 인공지능, 데이터 분석, 웹 개발 등 다양한 분야에서 활용된다.

    단점

    실행속도가 C++에 비해 상대적으로 느리다.

    대규모 데이터 처리에서 성능 이슈의 가능성이 있다.

    메모리를 자동으로 관리하는 대신 메모리 사용량이 더 커질 수 있다.

     

     

     

     

    OpenCV

    장점

    다양한 기능과 알고리즘이 제공된다.

    영상처리 관련 함수들을 편리하게 사용할 수 있다.

    다양한 운영 체제를 지원하며 프로그래밍 언어도 다양하게 지원한다.

    오픈 소스이기 때문에 영상 처리 개발자들이 활발하게 사용하고 개선하고 있다.

    단점

    C++기반으로 개발되었기 때문에 C++ 문법이나 객체 지향 프로그래밍에 대한 이해가 필요하다.

    다른 외부 라이브러리 의존성을 가지고 있어서 환경설정이 복잡할 수 있다.

     

     

     

     

     

    개인적 경험

    C++의 경우 프로그램 구조를 좀 더 세부적이고 정교하게 구성할 수 있다.

    처음에 배울 때는 조금 어렵지만 익숙해지면 효율적인 프로그래밍이 가능하다.

     

    그러나 외부 라이브러리를 사용할 때 굉장히 번거로운 부분이 있다. 파이썬처럼 간단하게 import하여 사용할 수 없다.

     

    그래서 빠른 테스트 작업이 필요할때나 모듈 개발 작업 전에는 파이썬으로 먼저 테스트 하고 C++작업을 수행한다.

    이렇게 하면 굉장히 빠르게 테스트를 할 수 있어서 개발 시간이 많이 단축된다.

     

     

    영상 처리 개발의 특성상 테스트에 시간이 많이 소요되는데 python이 거의 필수라고 생각한다.

     

     

    OpenCV의 경우 초반에 환경설정 하는 부분이 쉽지 않다. 특히 윈도우 C++ 연결할 때 복잡한 작업이 많았다.

    그러나 영상처리 알고리즘을 직접 개발할 필요 없이 함수 하나만 불러와서 간단히 빠르게 작업할 수 있다는 것이 최고의 장점이다.

     

    계속 버전 업데이트가 되면서 새로운 알고리즘이 추가 된다.

     

     

     

    물론 딥러닝을 사용하려면 추가적인 모듈 임포트가 필요하다.

    하지만 OpenCV 기본 함수들 만으로도 기본적인 이미지 전처리나 간단한 알고리즘을 만들기에 용이하다.

    댓글

Designed by Tistory.