1. 비주얼 스튜디오 코드 설치
2. C++ 컴파일 환경 구성(일반) 🔗 tasks.json 파일
3. C++ 디버그 환경구성(일반) 🔗 launch.json 파일
4. opencv 패키지 설치
5. opencv 환경 설정 🔗 c_cpp_properties.json 파일
5.1 pkg-config 설정
5.2 pkg-config PATH 설정
5.3 opencv 패키지를 참조하여 컴파일하기
환경 설정을 해 본 결과, Xcode를 이용하는 편이 환경설정은 간단합니다.
하지만 VSC(비주얼 스튜디오 코드)의 사용 편의성과, 가볍다는 장점이 있기 때문에 나름 고생해서 세팅방법을 정리했습니다. 또, VSC를 사용하면 (자기 환경에 맞는 ) 매 프로젝트 마다 번거로운 세팅을 할 필요 없이, 미리 설정해 둔 세팅파일을 프로젝트에 붙여 넣기만 함으로써 생산성을 높일 수 있는 것 같아요. 이런 점이 매력적으로 작용하는 것 같습니다.
1. 비주얼 스튜디오 코드 설치
다음 중 하나를 선택해서 비주얼 스튜디오 코드를 설치 합니다.
① brew를 이용한 설치(터미널을 열어, 아래를 입력 -> 자동 설치 완료)
brew install --cask visual-studio-code
② 아래 웹사이트에서 파일을 다운로드하여 설치하기.
2. C++ 컴파일 환경 구성(일반) 🔗 tasks.json 파일
3. C++ 디버그 환경구성(일반) 🔗 launch.json 파일
2,3번 내용은 아래의 글에서 확인할 수 있습니다.
4. opencv 패키지 설치
opencv패키지는 brew를 통해서, 또는 직접 소스코드를 다운로드하여 설치할 수 있습니다.
소스코드를 직접 다운로드할 경우에는 여러 가지 세팅이 필요합니다. 빡새요. 그래도 링크는 달아둡니다.
brew를 통해서 설치/세팅 까지 한 번에 해줍니다.
brew install opencv
brew 커맨드를 실행하면, 아래의 경로에 설치됩니다.
/usr/local/Cellar/opencv/
5. opencv 환경 설정 🔗 c_cpp_properties.json 파일
c_cpp_properties.json 파일은 VSC 익스텐션의 C/C++ Intellisense의 추가 기능을 지원합니다. 이 파일을 통해서 C++ 언어의 표준 버전을 지정하거나, opencv 패키지의 헤더 파일을 불러오기 위해 참조할 상대 경로를 추가할 수 있습니다. 추가하는 방법은 다음 단축키로 풀 다운 메뉴를 불러오고, "C/C++ : Edit Configurations (UI)"를 선택해주세요.
command + Shift + P
configuration을 선택하면 아래와 같은 창이 나오게 되며, 여기서 include Path, compiler Path, C++ 표준 버전 등을 선택할 수 있습니다. includePath 부분에 "~/opencv4"처럼, 패키지가 설치된 경로를 추가해 주세요.
📓 c_cpp_properties.json ( 필수 항목만 작성해서 정상 동작 확인했습니다. 😎 )
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/Cellar/opencv/4.5.1_2/include/opencv4"
],
"defines": [],
"macFrameworkPath": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "macos-clang-x64"
}
],
"version": 4
}
5.1 pkg-config 설정 ⚙️
컴파일 시 필요한 다이나믹 라이브러리를 pkg-config를 통해서 참조할 수 있습니다. pkg-config는 brew 커맨드를 이용하여 설치해줍니다.
brew install pkg-config
그럼 이제 pkg-config를 사용할 수 있고, 아래 경로에 잘 설치되어 있는지 확인해 주세요.
/usr/local/Cellar/pkg-config/0.29.2_3/bin/pkg-config
opencv를 brew 커맨드로 설치하게 되면, opencv 설치 경로에 pkgconfig 관련된 폴더가 같이 설치되며 이 경로에 opencv4.pc 형태의 pc 확장자 파일이 있을 겁니다.(설치 버전이 4.5.1 이여서 pc 파일명에 숫자 4가 들어가 있습니다.)
/usr/local/Cellar/opencv/4.5.1_2/lib/pkgconfig/opencv4.pc
📓 opencv4.pc 파일 내용.
(CMake 와도 관련이 있는 것으로 생각되는데요. 여기서는 CMake에 대한 내용은 깊게 찾아보진 않았습니다.)
pkg-config는 이 파일을 인수로 opencv의 Include Path와 (복수의 )다이나믹 라이브러리를 참조할 수 있게 됩니다. 그럼, pkg-config 가 이 파일의 위치를 알아야 하기 때문에 다음 순서인 5.2와 같이 PATH 설정이 필요하게 됩니다.
5.2 pkg-config PATH 설정 ⚙️
환경변수의 경로를 설정하는 개념입니다. pkg-config에서 찾아가게 되는 변수명은 "PKG_CONFIG_PATH"이며, 위에서 설명한 opencv4.pc 파일이 있는 경로를 변수명에 할당해 줍니다. 환경변수 할당방법은 여러 가지 경우가 있는데요. 임시 할당, 영구 할당 이렇게 있겠죠? 저는 영구적으로 적용하기 위해 루트 디렉토리의 .zshrc 파일(필자는 Oh-my-zsh 를 사용 중이기 때문에 이 파일에 입력.)에 한 줄 입력해줬습니다.
export PKG_CONFIG_PATH=/usr/local/Cellar/opencv/4.5.1_2/lib/pkgconfig
환경변수 할당 방법은 아래 글을 참고했습니다.
잘 설정되었는지 확인하기 위해 echo 커맨드로 경로를 출력해 보세요.
echo $PKG_CONFIG_PATH
5.3 opencv 패키지를 참조하여 컴파일하기 ⚙️
pkg-config 경로까지 설정이 완료되면, 라이브러리 참조가 정상적으로 작동하는지 확인해봐야 합니다.
아래의 커맨드를 터미널에서 입력해주세요. 아래의 "opencv4" 부분은 pc 확장자 파일명과 같아야 합니다. 반복해서 적고 있지만, opencv 버전에 따라 pc파일 이름이 다를 수 있기 때문에 pc 파일명을 확인 후 적용해주세요.
pkg-config opencv4 --libs --cflags opencv4
💻 커맨드 출력내용.
그럼, 마지막으로 cpp파일을 생성해서 opencv 패키지와 컴파일이 되는지 테스트를 해보겠습니다. 테스트를 하기 위해 프로젝트 폴더에 이미지 파일을 아무거나 하나 준비해주세요. 저 같은 경우는 "data_src/elon.png" 와 같이 폴더를 만들고 이미지 파일 하나를 넣어놨습니다.
📓 테스트를 위한 main.cpp 파일 코드 내용.(Gray 스케일로 색상 변경)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
Mat src, dst, src_gray;
int main()
{
int rtn = 0;
src = imread("data_src/elon.png");
cout << "test" << endl;
cvtColor(src, src_gray, COLOR_RGB2GRAY);
imshow("imgGRAY", src_gray);
rtn = waitKey(0);
if (rtn == 27)
{
return 0;
}
return 0;
}
그리고, 컴파일하기 위해 터미널(VSC의 main.cpp 파일 활성화 상태에서 하단 터미널.)에 다음을 입력합니다.
g++ -std=c++11 `pkg-config opencv4 --libs --cflags opencv4` main.cpp -o output
실행 파일명을 "output"으로 지정해 주었습니다. output이 왼쪽 내비게이터에 생성되고 에러가 없으면 문제가 없는 겁니다. 해당 파일을 실행해보면, 일론 머스크 사진이 회색으로 변경된 걸 확인할 수 있습니다.
(esc를 입력하면 실행파일이 종료됩니다. )
여기까지 opencv 패키지를 이용해서 정상적으로 동작하는 것을 확인했습니다. 하지만, 매번 터미널에다가 pkg-config 에다가 cflags 에다가 뭐다가 덕지덕지 많이 적어서 컴파일하면 굳이 VSC를 이용할 이유가 점점 더 없어지는 거겠죠.(방향키로 이전 커맨드를 찾아서 하면 되긴 하지만..)
2번에서 컴파일 환경을 구성하기 위해서 tasks.json 파일을 만들었습니다. 이 파일을 열어서 방금 입력했던 긴 커맨드를 짤라서 짤라서 넣어 줄 수 있습니다. 스페이스 기준으로 매개변수를 나누어서 적어 줄 수 있는데요. 그럼, 세밀한 부분에 대해서 일부를 수정하거나 삭제할 수도 있고, 매번 커맨드를 기억해내거나 키보드로 입력할 필요가 없어집니다. 그저 command + Shift + B 만 눌러주면 됩니다.
📓 매개변수를 다시 입력한 tasks.json 파일.
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 활성 파일 빌드",
"command": "/usr/bin/g++",
"args": [
// 기존의 기본 매개변수 구성.
//"-g",
// "${file}",
// "-o",
// "${fileDirname}/${fileBasenameNoExtension}",
//
// 새롭게 구성 시작.
"-std=c++11",
"`pkg-config",
"opencv4",
"--libs",
"--cflags",
"opencv4`",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
// 새롭게 구성 끝.
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "컴파일러: /usr/bin/g++"
}
]
}
✅ command + Shift + B 입력으로 빌드 완성.
(tasks.json 파일에 입력한 매개변수와 컴파일 커맨드 정상적으로 실행되었습니다.)
맥을 사용하는 입장에서는 Xcode에서 비교적 쉬운 방법으로 opencv 패키지를 세팅할 수 있습니다. 하지만 VSC가 손에 맞는 분들은 VSC 에디터에 프로젝트를 얹어서 진행해보는 것도 좋을 것 같습니다. 이 글의 전반적인 진행 내용은 이 글을 참고하여 작성했습니다.
'[ C++ ]' 카테고리의 다른 글
[ 머신 비전 ] 자율 주행을 구현하기 위해 필요한 것들.(feat. openCV) (0) | 2021.03.15 |
---|---|
[ openCV | C++ ] drawContours 함수 사용 방법. (0) | 2021.03.07 |
[ openCV | C++ ] findContours 함수 사용법, 입력 출력(포인트) 값의 이해 (0) | 2021.02.23 |
[ openCV | C++ ] Xcode 에서 openCV 환경 설정 하는 방법 (2) | 2021.02.12 |
[ openCV | C++ ] 기본기. 얼굴 인식(검출) 방법과 벡터 변수의 활용 (0) | 2021.02.08 |