이 포스트는 Ubuntu 터미널에서 명령어를 실행하는 것을 가정한다. 소스 다운로드부터 빌드까지 모든 명령어는 홈 디렉토리(~)에서 시작한다.
참고: OpenCV 3.4.6 기준으로 작성되었다. 현재 최신 버전은 4.x이며,
wgetURL의 버전 번호만 교체하면 동일한 절차로 설치할 수 있다.
필수 라이브러리 설치
기본 빌드 도구, CMake, 압축 해제 도구를 먼저 설치한다.
sudo apt-get install -y build-essential cmake unzip
GCC 버전 관리 (선택)
기본 GCC 버전으로 충분하다면 이 절은 건너뛰어도 된다. 특정 버전이 필요하다면 Ubuntu Toolchain PPA를 추가한 뒤 설치한다.
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-5 g++-5 gcc-6 g++-6 gcc-7 g++-7
시스템 기본 컴파일러를 교체하려면 update-alternatives로 우선순위를 설정한다.
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 70
sudo update-alternatives --config gcc
마지막 명령을 실행하면 설치된 버전 목록이 출력되며, 번호를 입력해 기본값을 선택할 수 있다. 기본값은 바꾸지 않고 cmake 빌드에서만 특정 버전을 사용하려면, cmake 실행 시 다음 옵션을 추가한다.
-DCMAKE_C_COMPILER=/usr/bin/gcc-5 -DCMAKE_CXX_COMPILER=/usr/bin/g++-5
선택 라이브러리 설치
필요한 기능에 따라 선택적으로 설치한다. 일반적인 개발 환경이라면 아래 항목 전체를 설치하는 것이 무난하다.
이미지 포맷
JPEG, PNG, TIFF 파일 인코딩/디코딩에 필요하다.
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
비디오 관련
FFmpeg 기반 인코딩·디코딩, V4L2 카메라 입력, Xvid·H.264 코덱을 포함한다.
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev \
libv4l-dev libxvidcore-dev libx264-dev
GUI
cv::imshow() 등 OpenCV 화면 출력 기능에 필요하다.
sudo apt-get install libgtk-3-dev
수학 라이브러리 및 기타
libatlas-base-dev는 행렬 연산을 가속하는 BLAS/LAPACK 구현이다. gfortran은 ATLAS 일부 컴포넌트 빌드에 필요하고, libgflags-dev는 일부 contrib 모듈이 사용하는 커맨드라인 플래그 라이브러리다.
sudo apt-get install libatlas-base-dev gfortran libgflags-dev
OpenCV 설치
다운로드
홈 디렉토리에서 실행한다.
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.6.zip
unzip opencv.zip
mv opencv-3.4.6 opencv
SIFT·SURF 등 특허 알고리즘을 포함한 비상업 모듈이 필요하다면 opencv_contrib도 함께 받는다. 상업적 목적으로 사용할 경우 라이선스를 별도로 확인해야 한다.
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.6.zip
unzip opencv_contrib.zip
mv opencv_contrib-3.4.6 opencv_contrib
CMake 구성
빌드 디렉토리를 생성하고 CMake를 실행한다.
cd opencv
mkdir build && cd build
opencv_contrib 없이 기본 빌드하는 경우:
cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
..
opencv_contrib 포함 빌드하는 경우 (-DOPENCV_ENABLE_NONFREE=ON은 특허 알고리즘 활성화):
cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
..
NVidia GPU를 활용하려면 위 명령에 CUDA 관련 옵션을 추가한다.
cmake -DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-DWITH_CUDA=ON \
-DENABLE_FAST_MATH=ON \
-DCUDA_FAST_MATH=ON \
-DWITH_CUBLAS=ON \
..
ccmake를 사용하면 사용 가능한 옵션을 대화형으로 탐색할 수 있다. 단, 모든 옵션이 표시되는 것은 아니므로 필요한 옵션은 cmake 명령에 직접 지정해야 한다.
sudo apt-get install cmake-curses-gui
ccmake ..
빌드 및 설치
$(nproc)은 시스템의 CPU 코어 수를 자동으로 사용해 병렬 컴파일 속도를 높인다. 시스템 사양에 따라 수십 분이 소요된다.
make -j$(nproc)
빌드 완료 후 make test로 테스트를 실행할 수 있지만, OpenCV 전체 테스트 스위트는 1시간 이상 걸리므로 생략해도 무방하다.
시스템 디렉토리에 설치하므로 sudo가 필요하다. 설치 후 ldconfig로 링커 캐시를 갱신한다.
sudo make install
sudo ldconfig
설치 확인
pkg-config --modversion opencv
설치한 버전 번호(예: 3.4.6)가 출력되면 정상 설치된 것이다. OpenCV 4.x를 설치한 경우에는 opencv 대신 opencv4로 확인한다.