
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 바뀐 부분 수정
2023. 3. 25
2025. 1. 26 컴파일러 다운로드 위치 추가 및 글 확인하여 수정
윈도우 환경에서 C++로 작성된 OpenCV 코드를 컴파일하기 위해 보통 Visual Studio를 설치하여 사용합니다.
큰 프로젝트를 진행하는 경우에는 Visual Studio에서 제공하는 개발환경이 필요할 수 있습니다.
하지만 간단히 테스트용으로 사용시에는 매번 Visual Studio에서 프로젝트 생성하고 OpenCV를 설정하는게 번거롭습니다.
예전에 MinGW용으로 OpenCV를 빌드하여 Visual Studio Code에서 사용하는 방법을 소개했었습니다.
MinGW 용으로 OpenCV 4.5.1 빌드 및 Visual Studio Code에서 사용하는 방법
https://webnautes.tistory.com/2126
이 방법을 사용하면 OpenCV 코드를 컴파일시 가벼운 Visual Studio Code를 사용할 수 있지만 MinGW용으로 OpenCV를 빌드해야 하는 수고가 따릅니다.
그래서 이번엔 미리 빌드되어 배포되는 MinGW용 OpenCV를 찾아서 Visual Studio Code에서 사용하는 방법을 소개합니다.
CMake 빌드 스크립트를 개선하여 하나의 Visual Studio Code 프로젝트(=처음 만든 폴더)에 하위 폴더 별로 OpenCV 코드를 두고 각각 컴파일하여 테스트할 수 있도록 했습니다.
하위 폴더 별로 OpenCV DLL 파일을 넣어두어야 실행이 가능합니다. 이 부분을 해결하는 것은 이후로 미룹니다.
1. 아래 링크에서 OpenCV 4.5.2-x64 항목에 보이는 zip를 클릭하여 다운로드합니다. OpenCV 4.5.5도 있지만 이 버전은 컴파일된 OpenCV 프로그램 실행시 DLL 관련 에러가 발생하여 사용하면 안됩니다.
https://github.com/huihut/OpenCV-MinGW-Build
2. 다운로드 받은 압축파일을 풀어서 c:\ 위치에 다음처럼 복사해둡니다.
본 포스트에서는 압축 푼 폴더가 아래 스크린샷처럼 C:\OpenCV-MinGW-Build-OpenCV-4.5.2-x64에 있다고 가정하고 진행합니다.
3. 컴파일러로 사용할 MinGW를 다운로드 받아야 합니다. 아래 링크에서x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z
파일을 다운로드 받습니다.
압축을 풀어 C:\mingw64에 복사해줍니다. 해당 경로로 이동시 다음처럼 보여야 합니다.
윈도우 키 + R을 눌러서 보이는 실행창에서 sysdm.cpl를 입력하고 엔터를 누릅니다.
고급 탭을 클릭하고 아래 보이는 환경 변수 버튼을 클릭합니다.
시스템 변수에서 Path를 선택하고 편집 버튼을 클릭합니다.
새로 만들기 버튼을 클릭한 후.. 맨 아래에 다음 경로를 입력합니다.
C:\mingw64\bin
윈도우 키 + R을 입력 후, cmd 엔터를 눌러서 실행되는 명령 프롬프트 창에서
다음처럼 gcc -v 명령이 실행 가능해지는지 확인하세요.
4. 다음 포스트를 참고하여 Visual Studio Code를 설치하세요.
Visual Studio Code 설치하는 방법( Windows / Ubuntu )
https://webnautes.tistory.com/1841
5. CMake를 설치합니다. Windows x64 Installer 항목에 있는 것을 다운로드하여 디폴트 옵션으로 설치를 진행하면 됩니다.
6. 탐색기 아이콘을 클릭하고 Open Folder를 클릭합니다.
7. 원하는 위치로 이동하여 폴더를 새로 생성후 이동하고, 폴더 선택을 클릭합니다.
Yes, I trust the authors를 클릭합니다.
8. new folder 아이콘을 클릭한 후, 폴더 이름 webcam-test을 입력 후, 엔터를 누릅니다.
9. 새로 생성된 폴더 webcam-test을 한번 클릭한 후, New File 아이콘을 클릭하고 파일 이름 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을 클릭해야 합니다. 이후 과정은 설치가 완료된 후 진행해야합니다.
10. 메뉴에서 Terminal > Configure Tasks을 선택합니다.
목록에서 Create tasks.json file from template를 선택합니다. 보이지 않으면 다시 시도해보세요.
Others를 선택합니다.
탐색기의 .vscode 폴더에 tasks.json 파일이 추가되고 편집기에서 해당 파일이 열립니다.
11. 편집기에 열린 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\" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ && 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}" ] } ] } |
12. IntelliSense 구성을 설정해야 합니다. Ctrl + Shift + P를 눌러서 보이는 입력 창에 c/c++을 입력한 후, C/C++: Edit Configurations (UI).를 선택합니다.
Compiler path를 g++.exe로 변경합니다.
IntelliSense 모드를 windows-gcc-x64로 변경합니다.
Include path에 다음 경로를 추가합니다.
C:/OpenCV-MinGW-Build-OpenCV-4.5.2-x64/include
자동으로 설정이 저장되므로 이 페이지를 그냥 닫아도 됩니다.
13. New File 아이콘을 클릭하고 파일 이름 CMakeLists.txt를 입력 후, 엔터를 누릅니다.
파일 내용을 다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다.
cmake_minimum_required(VERSION 3.5) set(CMAKE_C_COMPILER "C:/mingw64/bin/gcc.exe") set(CMAKE_CXX_COMPILER "C:/mingw64/bin/g++.exe") get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME) string(REPLACE " " "_" ProjectId ${ProjectId}) project(${ProjectId}) set(OpenCV_DIR C:/OpenCV-MinGW-Build-OpenCV-4.5.2-x64/) 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}) set(CMAKE_CXX_STANDARD 11) file(GLOB SOURCES *.cpp) add_executable(${PROJECT_NAME} ${SOURCES}) target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS}) |
14. 메뉴에서 File > Preferences > Keyboard Shortcuts를 선택합니다.
캡처화면에 빨간색 사각형으로 표시한 아이콘을 클릭합니다.
다음 내용으로 대체하고 Ctrl + S를 눌러 저장합니다.
// 키 바인딩을 이 파일에 넣어서 기본값을 덮어씁니다. [ //컴파일 { "key": "ctrl+alt+c", "command": "workbench.action.tasks.build" }, //실행 { "key": "ctrl+alt+r", "command": "workbench.action.tasks.test" } ] |
15. 이제 빌드를 해봅니다. main.cpp 파일을 선택하여 화면에 코드가 보이도록 합니다.
Ctrl + Alt + C를 누른 후, Visual Studio Code 상단 중앙에 보이는 compile for C++를 선택합니다. 다음 메뉴가 안보이고 빌드가 진행될 수도 있습니다.
현재 폴더에 실행파일이 생성됩니다.
예제 컴파일 진행시 다음과 같은 오류가 보인다면..
'&&' 토큰은 이 버전에서 올바른 문 구분 기호가 아닙니다.
다음처럼 기본 셀을 변경하여 해결할 수 있습니다.
Ctrl + Shift + P를 누른 후, default를 입력 하고 Terminal: Select Default Profile을 클릭하세요.
Command Prompt를 클릭하세요.
16. C:\OpenCV-MinGW-Build-OpenCV-4.5.2-x64\x64\mingw\bin에 있는 dll 파일을 현재 실행파일이 생성된 폴더로 복사해옵니다.
dll 파일을 모두 선택 후, 컨트롤키를 누른 상태에서 Visual Studio Code의 탐색기창에 드래그앤 드롭하면 dll 파일들이 복사됩니다.
본 포스팅 방식의 단점은 실행파일이 생긴 위치마다 DLL 파일을 복사해주는 번거로움이 있습니다.
17. Ctrl + Alt + R을 눌러서 실행해봅니다. Visual Studio Code 상단 중앙에 보이는 execute를 클릭합니다. 메뉴가 안보일 수도 있습니다. 웹캠이 PC에 연결되어 있어야 프로그램이 동작합니다
실행해보면 웹캠 영상을 볼 수 있습니다. Esc 키를 누르면 영상이 종료됩니다.
18. 이제 새로운 OpenCV 예제를 테스트하려면 탐색기 아래에 보이는 빈 공백을 클릭합니다.
이래야 새로운 폴더를 루트 폴더 아래에 생성할 수 있습니다.
19. 새 폴더 아이콘을 클릭하고 새로운 폴더 이름을 적은 후, 엔터를 누릅니다.
20. 새로 생성한 폴더에 소스코드 파일과 CMakeLists.txt 파일을 생성하고 빌드하면
( CMakeLists.txt는 앞 코드에서 사용한걸 그대로 사용하면 됩니다.)
main.cpp엔 다음 코드를 사용했습니다.
#include "opencv2/opencv.hpp" #include <iostream> using namespace cv; using namespace std; int main() { Mat image = cv::imread("image.png"); if(image.empty()) { std::cout << "이미지를 불러올 수 없습니다." << endl; return -1; } imshow("Image", image); waitKey(0); return 0; } |
exe 파일이 현재 폴더에 생성됩니다.
실행을 위해 필요한 DLL 파일을 복사해와야 합니다.
앞에서 만든 프로젝트 폴더에서 DLL 파일을 모두 선택한 후, Ctrl을 누른 채, 현재 폴더로 드래그앤드롭하면 복사가 됩니다.
이미지 파일들을 불러오려면 현재 실행 파일의 위치를 기준으로 가져와야 합니다.
별도의 폴더에 프로젝트 파일들이 위치하고 있지만 Visual Studio Code에서는 부모 폴더 이름을 기준으로 파일들을 가져오려고 하기 때문입니다.
아래 포스트를 참고하여 이미지 파일을 로드시 경로 앞에 현재 실행파일의 경로를 추가해주세요.
C/C++ - 실행 파일의 절대 경로 얻는 방법 ( realpath, GetModuleFileName )
https://webnautes.tistory.com/1448
현재는 부모 디렉토리에 이미지 파일 image.png를 저장해서 사용하고 있습니다.
실행 결과입니다.
진행 해보고, 문제가 생기거나 개선 사항이 있으면 언제든 댓글로 남겨주세요.
'OpenCV > Windows개발 환경&라이브러리 빌드' 카테고리의 다른 글
Visual Studio에서 OpenCV 프로젝트 설정을 템플릿으로 만들기 (2) | 2023.12.03 |
---|---|
Visual Studio에서 OpenCV 설치, 사용하는 방법 (0) | 2023.12.03 |
MinGW 용으로 OpenCV 4.5.1 빌드 및 Visual Studio Code에서 사용하는 방법 (0) | 2023.10.20 |
윈도우 환경에서 OpenCV의 VideoCapture가 웹캠 오픈이 늦은 경우 해결 방법 (0) | 2021.06.10 |
Visual Studio 2019에서 CUDA를 적용한 OpenCV 빌드하기 (0) | 2020.07.06 |