[OpenCV] C++와 OpenCV 4.x로 개발할 수 있는 환경 만들기

반응형

간만에 OpenCV 글을 작성하게 되었습니다. 요 몇년 백엔드 엔지니어링 공부를 하게 되면서 장난감처럼 여겨오던 OpenCV 글을 다시 쓰게 되었는데요. 안 본 사이에 벌써 OpenCV 4.6 Pre-release로 OpenCV 5.x 버전까지 올라온 것을 보고 정말 시간이 빨리 흘러가고 있다는 것을 새삼 느꼈습니다.

 

 

 

만들 환경

오늘은 아래의 3가지 도구를 사용해서 OpenCV 개발 환경을 만들어보도록 하겠습니다.

 

  • JetBrains CLion / CMake
  • OpenCV 4.6
  • Ubuntu Linux 20.04

 

사실 OpenCV를 사용할 수 있는 환경은 C++ 외에도 Python이 있는데요. 딥러닝이나 머신러닝을 주로 하시는 분들은 Python을 이용할 것이고, 그 외 IoT나 카메라 등 하드웨어를 주로 다루시는 분들은 C++를 쓸 것입니다. Python과 달리 설치가 비교적 쉽지 않은 C++ 환경을 만들어보도록 하겠습니다.

 

 

 

Install build tools and libraries

우리는 여기서 OpenCV의 소스를 직접 다운로드 받아 설치할 것이므로 이 소스를 빌드할 도구들이 필요합니다.

 

$ sudo apt install build-essential pkg-config cmake
  • build-essential: C/C++ 컴파일 관련 라이브러리(make 포함)
  • pkg-config: 프로그램 컴파일 및 링크할 때 필요한 라이브러리 메타 정보(.pc 파일)를 읽는 모듈
  • cmake: CMakeList를 Makefile로 변환해주는 도구

 

이 3가지를 전부 받았다면 다음은 OpenCV 빌드를 위해 사용하는 이미지 및 비디오 라이브러리를 설치해야 합니다.

 

$ sudo apt install libjpeg-dev libtiff5-dev libpng-dev

JPEG, TIFF, PNG 등 OpenCV에서 메모리로 불러오거나 처리한 이미지를 JPEG, TIFF, PNG 파일로 저장하거나, 반대로 이 파일들을 읽어 메모리에 적재할 수 있도록 도와주는 라이브러리들입니다.

 

$ sudo apt install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev

ffMPEG, avi Codec, XVID core, x264 mp4 등 비디오 영상 코덱 라이브러리를 설치합니다. 이들 라이브러리는 특정 영상을 만들고, 저장하거나 혹은 특정 영상 파일을 OpenCV에서 불러올 수 있도록 도와줍니다.

 

$ sudo apt install libv4l-dev v4l-utils

v4l(Video4Linux) 패키지는 Linux에서 카메라 영상을 가져오기 위한 드라이버 API입니다.

 

$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

비디오 스트리밍을 위한 라이브러리를 통해 OpenCV로 스트리밍 프로그램을 개발할 수 있도록 도와주는 패키지를 설치합니다.

 

$ sudo apt install libgtk-3-dev

OpenCV에서는 직접 이미지를 메모리에 적재하고 이를 Window에 불러와 개발자가 디버깅 해주도록 제공하는데요. 이 때 사용하는 highgui 모듈은 크로스 플랫폼 라이브러리인 QT와 리눅스의 윈도 라이브러리인 GTK를 사용할 수 있습니다. 

 

그 중에서 GTK+를 사용해보도록 하겠습니다.

 

$ sudo apt install libatlas-base-dev gfortran libeigen3-dev
  • libatlas-base-dev: C, Fortran 기반 행렬 연산 최적 라이브러리 
  • gfortran: 위 라이브러리 사용을 위한 포트란
  • libeigen3-dev: Mozilla가 개발한 OpenCV에 내장된 Matrix, Vector, Scalar 자료구조 라이브러리

 

 

 

Clone OpenCV

필요한 라이브러리 설치가 끝났으면 이제 OpenCV 소스를 다운로드 받아 보도록 하겠습니다.

 

$ git clone https://github.com/opencv/opencv.git --depth=20

위 명령어를 이용해 opencv 소스를 다운로드 받습니다.

 

$ git clone https://github.com/opencv/opencv_contrib.git --depth=20

만약, OpenCV Extra 모듈도 같이 필요하다면 위 명령어도 같이 실행해줘야 합니다.

 

$ mkdir build && cd build

CMake를 이용해 빌드 파일을 생성하기 전, build 디렉터리를 만들어줍니다.

 

$ cmake .. -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_TPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_PACKAGES=OFF -D BUILD_TESTS=OFF -D BUILD_PREF_TESTS=OFF -D WITH_QT=OFF -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_opencv_python3=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_XINE=ON -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LEADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON

만약 Extra 모듈이 필요하지 않다면 OPENCV_EXTRA_MODULES_PATH는 적지 않아도 됩니다. 

 

성공적으로 완료되었다면 Build files have been written to: 라는 것이 나올 것입니다.

 

 

 

Compile and Install OpenCV

이제 빌드 환경이 만들어졌으니 본격적으로 소스 코드를 컴파일 해보겠습니다.

 

$ make -j $(nproc)

여기서 nproc란, 여러분들 컴퓨터의 코어 갯수인데요. 최대 코어 갯수를 출력하기 때문에 컴파일에 모든 코어를 다 사용하게 됩니다. 따라서 컴파일 중 일부 작업을 해야한다면 자신의 코어 중 일부만 사용하시고, 컴파일 중에 아무것도 하지 않으실 것이라면 위 명령어를 적어주시면 됩니다.

 

저는 16코어 중 8코어만을 사용했습니다. 오른쪽 위에 파란색 부분이 CPU 사용률 부분인데, 정확히 반 정도만 차지하고 있습니다. 코어 사용량에 따라 컴파일 속도가 달라지기 때문에 여러분 PC에 맞춰 컴파일에 사용할 코어 수를 조정하시면 됩니다.

 

$ sudo make install

컴파일이 모두 완료되었으면, 이제 빌드된 라이브러리 설치를 진행합니다.

 

 

 

Create Project

모든 OpenCV 설치가 끝났습니다. 이젠 CLion을 열어서 새로운 프로젝트를 만들고, OpenCV 라이브러리를 어떻게 적용하는지에 대해 알아보겠습니다.

 

opencvExample이라는 이름으로 프로젝트를 만들거나 원하는 이름으로 프로젝트를 만듭니다.

 

그런 다음 위와 같이 include 할 디렉터리에 OpenCV를 넣고, link도 OpenCV LIBS를 넣어줍니다.

 

 

 

Example

간단하게 명령어에 경로를 입력하면 이미지가 로딩되는 프로그램을 작성해보도록 하겠습니다.

 

위 코드를 만들고 Clion에서 실행하면 Usage Command가 나타납니다. 샘플 실행을 위해 [Run] - [Run/Debug Configurations]로 들어갑니다.

 

여기에 Program arguments 라는 곳이 있습니다. 여기에 여러분들이 읽을 이미지의 경로를 입력하면 됩니다.

 

그럼 CLion에서도 터미널에 명령어를 치지 않고 바로바로 이미지가 불러와지는 것을 볼 수 있습니다. 

 

 

 

마치며...

아주 간단한 예제로 OpenCV를 설치하고 CLion에서 개발할 수 있는 환경을 만들어봤습니다. 이전에 비하면 NVIDIA GPU 독점 드라이버 설치가 간단해지면서 CUDA 설치 비용이 감소되는 등의 변화가 있었는데요.

 

하지만 CMake에 대해 잘 모르신다면 이 글을 읽이 어려울 수 있습니다. CMake에 대해 좀 더 공부해보고 싶다면 아래의 글을 추천드립니다.

 

2017.03.04 - [Programming/C++] - CMake를 이용한 C/C++ 프로젝트 빌드

 

CMake를 이용한 C/C++ 프로젝트 빌드

Makefile이라는 것을 한 번 쯤은 다들 들어보셨을 것이라 생각합니다. Visual Studio IDE 도구를 이용하면 Makefile을 오히려 보기 힘들 수 있겠지만, Unix, Linux에서 C, C++ 프로그래밍을 하셨다거나 크로스

blog.neonkid.xyz

기본적으로 대부분의 C, C++ 기반 모듈들은 CMake를 통해 빌드/컴파일 하게 됩니다. 따라서 이를 이해하고 OpenCV를 설치해보면서 더 나아가서는 리눅스 커널을 빌드하는 등의 공부를 해보시면 더욱 좋을 것 같습니다.

 

 
반응형

Tistory Comments 0