반응형

Visual Studio Code에서 손쉽게 OpenCV 코드를 컴파일하고 테스트하는 방법을 다룹니다. 

 



2020. 12. 6 최초작성

2021.  4. 21 기본 셸 관련 에러 해결

2021. 7. 17 VIsual Studio Code 업데이트 후, CMAKE 사용시 바뀐점 반영

2021. 9. 15   CMakeLists.txt에서 누락된 부분 수정

2021. 10. 8 Visual Studio Code 바뀐 부분 수정



윈도우 환경에서 C++로 작성된 OpenCV 코드를 컴파일하기 위해 보통  Visual Studio를 설치하여 사용합니다. 

하나의 프로젝트만 진행하는 경우에는 Visual Studio에서 제공하는 개발환경이 필요할 수 있습니다.

 

하지만 간단히 테스트용으로 사용시에는 매번 Visual Studio에서 프로젝트 생성하고 OpenCV를 설정하는게 번거롭습니다.

예전에 MinGW용으로 OpenCV를 빌드하여 Visual Studio Code에서 사용하는 방법을 소개했었습니다. 



MinGW + Visual Studio Code에서 OpenCV 사용하는 방법

https://webnautes.tistory.com/1344



이 방법을 사용하면 OpenCV 코드를 컴파일시 가벼운 Visual Studio Code를 사용할 수 있지만  MinGW용으로 OpenCV를 빌드해야 하는 수고가 따릅니다.  



그래서 이번엔 미리 빌드되어 배포되는 MinGW용 OpenCV를 찾아서 Visual Studio Code에서 사용하는 방법을 소개합니다. 

 

CMake 빌드 스크립트를 개선하여 하나의 Visual Studio Code  프로젝트(=처음 만든 폴더)에 하위 폴더 별로 OpenCV 코드를 두고 각각 컴파일하여 테스트할 수 있도록 했습니다.

 

하위 폴더 별로 OpenCV DLL 파일을 넣어두어야 실행이 가능합니다. 이 부분을 해결하는 것은 이후로 미룹니다.




1. 아래 링크에서 OpenCV 4.1.1-x64 항목에 보이는 zip를 클릭하여 다운로드합니다. 

https://github.com/huihut/OpenCV-MinGW-Build

 



아래처럼 contrib를 포함시킨 최신 버전도 존재하지만 x86용 MinGW로 OpenCV를 빌드해서 사용하지 않았습니다.

필요하면 아래 버전으로 다운로드 후, 본 포스트의 내용을 약간 수정하여 진행하면 테스트 가능할 듯합니다. 

컴파일러는 MinGW-x86-7.3.0을 사용해야 합니다. 주의할 점은 64비트용이기 때문에 32비트에서는 동작하지 않습니다.

 

 



2. 다운로드 받은 압축파일을 풀어서 c:\ 위치에 다음처럼 복사해둡니다.

본 포스트에서는 폴더 이름을 opencv-4.1.1-mingw로 정했다고 가정하고 진행합니다.

 




3. 아래 링크에서 MinGW x86_64-posix-seh를 다운로드 받아야 합니다. OpenCV를 빌드할때 사용했다고 명시된 컴파일러입니다. 

다른 버전을 사용하면 문제가 생길 수 있습니다.

https://sourceforge.net/projects/mingw-w64/files/






4. c:\ 위치에 mingw64 이름으로 복사해두세요. 

 




5. 환경 변수 PATH에 MinGW의 bin 폴더를 추가해야 합니다.

 

윈도우 키 + R을 눌러서 보이는 실행창에서 sysdm.cpl를 입력하고 엔터를 누릅니다. 

 

 

 

고급 탭을 클릭하고 아래 보이는 환경 변수 버튼을 클릭합니다. 

 

 

 

시스템 변수에서 Path를 선택하고 편집 버튼을 클릭합니다. 

 

 

 

새로 만들기 버튼을 클릭한 후.. 맨 아래에 다음 경로를 입력합니다.

C:\mingw64\bin

 

 

 

윈도우 키 + R을 입력 후, cmd 엔터를 눌러서 실행되는 명령 프롬프트 창에서 

다음처럼 gcc -v 명령이 실행 가능해지는지 확인하세요.

 

 

 

 

6. 다음 포스트를 참고하여 Visual Studio Code를 설치하세요.

 

Visual Studio Code 설치하는 방법( Windows / Ubuntu )

https://webnautes.tistory.com/1197 




7. CMake를 설치합니다.

https://cmake.org/download/ 

 




 설치 진행 중 “Add CMake to the system PATH for all users”를 체크해야 합니다. 

 




8. 탐색기 아이콘을 클릭하고 폴더 열기를 클릭합니다. 

 




9.원하는 위치로 이동 후, 새 폴더를 클릭하여 새로운 폴더를 생성합니다. 

 




새로 생성한 폴더로 이동 후, 폴더 선택을 클릭합니다.

 




10. “새 폴더” 아이콘을 클릭한 후, 폴더 이름 webcam-test-1을 입력 후, 엔터를 누릅니다. 

 




11. 새로 생성된 폴더 webcam-test-1을 한번 클릭한 후, 새파일 아이콘을 클릭하고 파일 이름 main.cpp를 입력 후, 엔터를 누릅니다.

 



새로 생성된 main.cpp에 다음 코드를 복사하여 붙여넣기 하고 Ctrl + S를 눌러 저장합니다. 

 

#include "opencv2/opencv.hpp"
#include <iostream> 
 
using namespace cv; 
using namespace std
 
 
 
int main(int, char**) 


    VideoCapture cap(0)
    if (!cap.isOpened()) 
    { 
        printf("카메라를 열수 없습니다. \n"); 
    } 
 
 
    Mat frame; 
    namedWindow("camera1", 1); 
 
 
    for (;;) 
    { 
 
        cap >> frame; 
 
        imshow("camera1", frame); 
 
        if (waitKey(20) >= 0) break
    } 
 
 
    return 0





오른쪽 아래에 다음 다이얼로그가 보이면 Install을 클릭해야 합니다. 이후 과정은 설치가 완료된 후 진행해야합니다.

 




12. 메뉴에서 터미널 > 기본 빌드 작업 구성을 선택합니다. 

 

다음 항목들이 보이면 g++.exe를 클릭합니다.

 



다음 선택 화면이 추가로 보일 수 있습니다.

 

템플릿에서 tasks.json 파일 만들기를 선택합니다. 

 

 

 

Others를 선택합니다.

 




탐색기의 .vscode 폴더에   tasks.json 파일이 추가되고 편집기에서 해당 파일이 열립니다.

 




13. 편집기에 열린 tasks.json 파일을 다음 내용으로 대체하고 Ctrl +S를 눌러 저장합니다.

 

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation" : { "reveal": "always" },
    "tasks": [
          //C++ 컴파일
          {
            "label": "compile for C++",
            "command": "cd ${fileDirname} && cmake . -G \"MinGW Makefiles\" && mingw32-make",
            "group": "build",

            //컴파일시 에러를 편집기에 반영
            //참고:   https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher

            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    // The regular expression.
                  //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        // 바이너리 실행(Windows)
        {
            "label": "execute",
            "command": "cmd",
            "group": "test",
            "args": [
                "/C", "${fileDirname}\\${fileDirnameBasename}"
            ]
        }
    ]
}





14.  IntelliSense 구성을 설정해야 합니다.  Ctrl + Shift + P를 눌러서 보이는 입력 창에 c/c++을 입력한 후, C/C++: 구성 선택...를 선택합니다. 

 

 

 

구성 편집(UI)를 선택합니다.

 

 

 

컴파일러 경로를 g++.exe로 변경합니다. 

 




IntelliSense 모드를 windows-gcc-x64로 변경합니다. 

 




경로 포함에 다음 경로를 추가합니다. 

 

C:\opencv-4.1.1-mingw\include

 



자동으로 설정이 저장되므로 이 페이지를 그냥 닫아도 됩니다. 





15. 파일을 추가할 폴더를 한번 클릭한 후, 새파일 아이콘을 클릭하고 파일 이름 CMakeLists.txt를 입력 후, 엔터를 누릅니다.

 




파일 내용을 다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다. 

 

cmake_minimum_required(VERSION 3.0)

set(OpenCV_DIR C:/opencv-4.1.1-mingw/)
find_package( OpenCV REQUIRED )


message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

include_directories(${OpenCV_INCLUDE_DIRS})


get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId})

set (CMAKE_CXX_STANDARD 11)

file(GLOB SOURCES  *.cpp)

add_executable(${PROJECT_NAME} ${SOURCES} )
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS})





16. 메뉴에서 파일 > 기본 설정 > 바로 가기 키를 선택합니다. 

캡처화면에 빨간색 사각형으로 표시한 아이콘을 클릭합니다.






다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다. 

 

// 키 바인딩을 이 파일에 넣어서 기본값을 덮어씁니다.
[
    //컴파일
    { "key": "ctrl+alt+c", "command": "workbench.action.tasks.build" },
   
    //실행
    { "key": "ctrl+alt+r", "command": "workbench.action.tasks.test" }
]




17. 이제 빌드를 해봅니다. main.cpp 파일을 선택하여 화면에 코드가 보이도록 합니다. 

Ctrl + Alt + C를 누른 후, Visual Studio Code 상단 중앙에 보이는 compile for C++를 선택합니다.

 



다음처럼 빌드가 진행됩니다. 

 




현재 폴더에 실행파일이 생성됩니다.

 




예제 컴파일 진행시 다음과 같은 오류가 보인다면..

 

'&&' 토큰은 이 버전에서 올바른 문 구분 기호가 아닙니다.

 

 

다음처럼 기본 셸을 변경하여 해결할 수 있습니다.

 

 

Ctrl + Shift + P를 누른 후, default를 입력 하고 터미널 : 기본 프로필 선택을 클릭하세요. 

 

 

Command Prompt를 클릭하세요. 

 




18. C:\opencv-4.1.1-mingw\x64\mingw\bin에 있는 dll 파일을 현재 실행파일이 생성된 폴더로 복사해옵니다. 

dll 파일을 모두 선택 후, 컨트롤키를 누른 상태에서 Visual Studio Code의 탐색기창에 드래그앤 드롭하면 dll 파일들이 복사됩니다. 

 

본 포스팅 방식의 단점은 실행파일이 생긴 위치마다 DLL 파일을 복사해주는 번거로움이 있습니다.

 




19. Ctrl + Alt + R을 눌러서 실행해봅니다. Visual Studio Code 상단 중앙에 보이는 execute를 클릭합니다. 

웹캠이 PC에 연결되어 있어야 동작합니다

 



웹캠 영상을 볼 수 있습니다.  Esc 키를 누르면 영상이 종료됩니다.




20. 이제 새로운 OpenCV 예제를 테스트하려면 탐색기 아래에 보이는 빈 공백을 클릭합니다. 

이래야 새로운 폴더를 루트 폴더 아래에 생성할 수 있습니다.

 




21. 새 폴더 아이콘을 클릭하고 새로운 폴더 이름을 적은 후, 엔터를 누릅니다. 

 




22. 새로 생성한 폴더에 소스코드 파일과 CMakeLists.txt 파일을 생성하고 빌드하면 exe 파일이 현재 폴더에 생성됩니다. 

 





실행을 위해 필요한 DLL 파일을 복사해와야 합니다. 

앞에서 만든 프로젝트 폴더에서 DLL 파일을 모두 선택한 후, Ctrl을 누른 채, 현재 폴더로 드래그앤드롭하면 복사가 됩니다. 

 





진행 해보고,  문제가 생기거나 개선 사항이 있으면  언제든 댓글로 남겨주세요.  



이미지 같은 파일들을 불러오려면 현재 실행 파일의 위치를 기준으로 가져와야 합니다. 

별도의 폴더에 프로젝트 파일들이 위치하고 있지만 Visual Studio Code에서는 부모 폴더 이름을 기준으로 파일들을 가져오려고 하기 때문입니다. 

아래 포스트를 참고하여 이미지 파일을 로드시 경로 앞에 현재 실행파일의 경로를 추가해주세요. 

 

C/C++ - 실행 파일의 절대 경로 얻는 방법 ( realpath, GetModuleFileName )

https://webnautes.tistory.com/1448




반응형

진행해본 결과물을 기록 및 공유하는 공간입니다.
잘못된 부분이나 개선점을 알려주시면 반영하겠습니다.


소스코드 복사시 하단에 있는 앵커 광고의 왼쪽 위를 클릭하여 닫은 후 해야 합니다.


문제가 생기면 포스트와 바뀐 환경이 있나 먼저 확인해보세요.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

TistoryWhaleSkin3.4">