ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Windows 10에서 Visual Studio Code와 CMake를 사용하여 C++용 OpenCV 사용하기 - [3] VS Code에서 작성한 코드를 컴파일
    컴퓨터 비전/OpenCV 2021. 10. 12. 11:33

     

     

    Windows 10에서 Visual Studio Code와 CMake를 사용하여 C++용 OpenCV 사용하기 - [2] OpenCV 빌드하기

    Windows 10에서 Visual Studio Code와 CMake를 사용하여 C++용 OpenCV 사용하기 - [1] 각 구성요소의 역할 파악 C++용 OpenCV를 사용하기 위해 검색을 하다 보면 느끼는 점이, 초보자에게는 헷갈리게도 필요한 튜.

    wjdghksdl26.tistory.com

    지난 글에서는 CMake와 MinGW를 사용하여 OpenCV를 빌드하였습니다. 이번에는 VS Code로 작성한, OpenCV를 사용하는 C++ 코드를 컴파일하는 방법에 대해 알아보겠습니다.

     

    일단 VS Code에서 프로젝트 폴더를 만들고 다음과 같은 예제 코드를 입력합니다.

     

    웹캠 영상을 받아 와 흑백으로 변환해 출력하는 간단한 예제입니다. main.cpp로 프로젝트 폴더에 저장합니다.

     

    이제 VS Code의 몇 가지 확장 기능을 설치합니다. 마켓플레이스에서 다음과 같은 확장기능들을 찾아 설치해 주시면 됩니다.

     

    설치 후, Ctrl+Shift+P를 눌러 명령 팔레트를 열고 "CMake: Configure"를 입력하여 클릭합니다.

     

    그러면 다음과 같이 나오는데, 우리가 설치한 컴파일러인 GCC 8.1.0 어쩌구를 선택해 줍니다.

     

    선택하면 잠시 후 프로젝트 폴더에 .vscode 폴더가 생성되고, 그 안에 settings.json 파일이 생성됩니다. CMake에게 MinGW의 위치를 알려 주는 파일입니다. 해당 파일을 열고 다음과 같이 수정해 줍니다.

     

    파일을 저장하고, 프로젝트 폴더에 CMakeLists.txt라는 파일을 생성한 다음 다음과 같이 입력합니다.

     

    이 파일은 CMake에게 빌드를 할 때 어떻게 할지 알려주는 파일입니다. CMake의 사용법과 옵션은 다른 훌륭한 글들도 많고, 무엇보다 저도 아직 기초적인 부분밖에 모르기 때문에 일단 OpenCV와 관련된 부분만 보겠습니다.

     

    • Line 4: OpenCV가 설치된 경로를 OpenCV_DIR 이라고 지정합니다.
    • Line 5: OpenCV의 헤더 파일들이 있는 경로를 OpenCV_INCLUDE_DIRS 라고 지정합니다.
    • Line 6: OpenCV 라이브러리 파일들(dll)이 있는 경로를 OpenCV_LIB_DIR 이라고 지정합니다.
    • Line 8: 이 프로젝트를 컴파일할 때 OpenCV가 필요함을 지정합니다.
    • Line 9: 컴파일할 때 OpenCV의 헤더 파일들을 include 합니다.
    • Line 16: 컴파일된 exe 파일을 실행할 때 필요한 라이브러리 파일들의 경로를 지정합니다.

     

    하여튼 이렇게 입력하고 저장합니다. 이제 CMake에게 알려줄 것들은 모두 알려주었습니다. 이대로도 컴파일은 가능하지만, 아직 중요한 일이 남았습니다. VS Code에게 OpenCV 헤더 파일들의 경로를 알려주지 않았기 때문에 C++ 코드를 작성할 때 자동완성이 되지 않습니다(예를 들어 cv::Video 까지만 입력해도 알아서 VideoCapture를 추천 함수명으로 띄워 주는 등). 이거 없이 코드를 작성하기는 너무 힘들기 때문에, VS Code에게 헤더 파일들의 경로를 알려주도록 하겠습니다. 아까와 같이 Ctrl+Shift+P를 눌러 명령 팔레트를 띄우고 C/C++: Select a configuration을 검색해 클릭합니다.

     

    그러면 다음과 같은 드롭다운 메뉴가 뜨는데, 구성 편집(UI)을 클릭합니다.

    그러면 .vscode 폴더에 c_cpp_properties.json 이라는 파일이 생성됩니다. 이 파일은 VS Code에게 프로젝트의 각종 정보를 알려주는 파일입니다. "includePath" 부분에 추가적인 헤더 파일의 경로를 지정해주면 거기서 함수명, 클래스명 등을 읽어 와 자동완성을 시켜 줍니다! 또한 컴파일러의 경로도 지정할 수 있습니다. 일단 다음과 같은 창이 열린 것을 확인합니다.

     

    일단 [컴파일러 경로]를 우리의 MinGW 경로(제 경우에는 C:\mingw64\bin\g++.exe)로 수정해 줍니다.

     

    다음은 스크롤을 내려 [IntelliSense 모드]windows-gcc-x64로 변경해 줍니다.

     

    그리고 제일 중요한 [경로 포함]OpenCV 헤더 파일들의 경로를 추가해 줍니다.

     

    이제 VS Code를 한 번 껐다 켜 주면 코드 자동완성이 작동할 것입니다. 다음과 같이 테스트해 보면 됩니다.

     

    처음에 만든 예제 코드를 컴파일 및 실행하기 전 해야 할 일이 하나 더 남았습니다. 우리가 컴파일한 OpenCV는 동적 라이브러리이기 때문에, OpenCV를 사용하는 exe 파일이 실행될 때 OpenCV의 dll 파일들을 필요로 합니다. 이 파일들을 시스템 Path에 추가할 필요가 있습니다. 두 번째 글에서와 같이 Path에 (opencv 빌드 폴더)\install\x64\mingw\bin을 추가해 줍니다.

     

    추가가 완료되었으면 VS Code로 돌아와 Ctrl+Shift+P로 명령 팔레트를 열고 CMake: Build를 검색 및 클릭합니다.

     

    클릭하면 CMake가 빌드를 시작하고, 터미널에 다음과 같이 빌드 과정이 표시됩니다.

     

    빌드가 완료되면 build 폴더 안에 exe 파일이 있는 것을 확인할 수 있습니다. 직접 실행시켜도 되고, 명령 팔레트를 열어 CMake: Run without debugging을 검색 및 클릭해도 됩니다.

     

    정상적으로 실행되면 성공입니다.

     

     

    ---------- 추가 정보 ----------

     

    이렇게 컴파일한 실행 파일은 동적 라이브러리를 사용하기 때문에, 컴파일한 컴퓨터 외에 OpenCV가 설치되어 있지 않은 다른 컴퓨터에서 실행하면 dll을 찾지 못해 실행이 되지 않습니다. 모든 컴퓨터에서 exe 파일 하나만 가지고도 실행이 가능하게 하려면 OpenCV를 정적 라이브러리로 구성하여 컴파일해야 합니다. 일단 지금은 C++용 OpenCV를 사용하는 것이 주 목적이기도 하고, 제가 아직 정적 라이브러리로 구성해본 적이 없기 때문에 여기서 마무리하고 다음에 기회가 되면 다뤄 보도록 하겠습니다.

    댓글

Designed by Tistory.