Ubuntu OpenCV 3.X 설치

이 포스트의 내용은 Ubuntu terminal에서 실행하는 것을 가정한다.

필수 라이브러리 설치

먼저 기본 개발환경에 관련된 라이브러리와 최신 C++ 버전과 컴파일러를 이용하기 위한 추가 라이브러리 설치한다.

sudo apt-get install -y build-essential cmake

만약 특별한 버전의 컴파일러가 필요할 경우 먼저 다음과 같이 toolchain을 Ubuntu의 업데이트 목록에 넣어준다.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

이제 필요한 버전의 컴파일러를 다음과 같이 다운받는다.

sudo apt-get install gcc g++ gcc-5 g++-5 gcc-6 g++-6 gcc-7 g++-7

참고로 특정 gcc 또는 g++ 버전을 CMake와 함께 이용하고 싶을 때는 CMake의 옵션을 이용할 수 있다. 예를 들어,

cmake -DCMAKE_C_COMPILER=/usr/bin/gcc-5 -CMAKE_CXX_COMPILER=/usr/bin/g++-5

같이 cmake 옵션에 컴파일러를 직접 지정해 줄 수 있다. 필요할 때만 특정 컴파일러를 지정하지 않고 아예 기본 컴파일러를 바꾸고 싶을 경우 shell의 update-alternatives 명령을 이용하면 된다.

선택 라이브러리 설치

이부분은 필요한 라이브러리에 따라 많은 부분이 달라질 수 있으므로 잘 선택하여 설치한다.

sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install libgflags-dev

위 명령어들은 다음 라이브러리들을 포함한다.

  • 이미지 관련 라이브러리
    • libjpeg: 무료 JPEG 이미지 처리 라이브러리
    • libpng: 공식 PNG 이미지 처리 라이브러리
    • libtiff: TIFF 이미지 처리 라이브러리
  • 비디오 관련 라이브러리
    • libavcodec: FFmpeg에 포함된 무료 오픈소스 비디오 인코딩/디코딩 라이브러리
    • libavformat: FFmpeg에 포함된 무료 비디오, 오디오 파일 및 스트리밍 등의 입출력 처리용 오픈소스 라이브러리
    • libswscale: FFmpeg에 포함되고 최적화 된 이미지/비디오 처리 라이브러리. 라이브러리 이름과 같이 resize, scaling, colospace conversion 등을 지원한다.
    • libv4l: 필립스에서 개발하고 유지하는 리눅스의 비디오 입출력 레이어. 기존의 V4L2 라이브러리 위에 추가된다.
    • libxvidcore: 오픈 소스 MPEG-4 비디오 코덱 라이브러리
    • libx264: X.264 코덱 라이브러리
  • GUI 관련 라이브러리
    • libgtk-3: 멀티 플랫폼 GUI 라이브러리
  • 수학 라이브러리
    • libatlas: 최적화된 선형대수 라이브러리
  • 기타 컴파일러
  • 유틸리티
    • libgflags: 로깅 라이브러리

OpenCV 라이브러리 설치

먼저 사용할 버전과 필요한 범위, 목적을 결정한다. 그리고 다음과 같이 소스코드를 내려받는다.

wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.6.zip

만약 다른 버전의 OpenCV가 필요할 경우 3.4.6을 필요한 버전으로 대체한다. 기본 라이브러리에 추가로 유료 또는 비상업 모듈이 필요할 경우 OpenCV Contribution Modules을 내려 받을 수 있다. 대부분의 모듈이 상업적 목적으로 사용할 경우 라이센스 획득이 필요하므로 잘 확인하도록 한다.

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.6.zip

내려받은 압축 파일들은 다음과 같이 해제한다.

unzip opencv.zip
unzip opencv_contrib.zip

조금 더 쉬운 접근을 위해 다음과 같이 압축 해제된 폴더의 이름을 변경 해 준다.

mv opencv-3.4.6 opencv
mv opencv_contrib-3.4.6 opencv_contrib

이제 소스를 컴파일 할 차례이다. 먼저 다음과 같이 opencv 폴더 안에 build 폴더를 만들고 이동하자.

cd opencv
mkdir build
cd build

마지막으로 CMake를 사용하여 Makefile을 만들어 줄 차례이다. 이 부분은 사용자의 필요에 따라 다양한 변화가 요구될 수 있으므로 잘 확인하고 선택해야 한다. 다음은 기본적인 목적으로 사용할 수 있는 CMake 명령이다.

cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DINSTALL_C_EXAMPLES=OFF -DOPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=~/Library/opencv_contrib/modules ..

만약 NVidia GPU가 설치되어 있고 CUDA로 구현된 알고리즘들을 사용하고 싶다면 다음의 추가 옵션들을 위 명령어의 .. 전에 삽입하면 된다.

-DWITH_CUDA=ON -DENABLE_FAST_MATH=ON -DCUDA_FAST_MATH=ON -DWITH_CUBLAS=ON

CUDA 설치와 관련된 정보는 이 링크를 확인 해 보자.

더 많은 빌드 옵션들을 알고 싶다면 ccmake라는 툴을 사용 해 보자.  ccmake는 다음과 같이 설치할 수 있다.

sudo apt-get install cmake-curses-gui

위의 cmake 명령을 실행한 후 다음 명령을 입력한다.

ccmake ..

주의할 점은 ccmake가 사용가능한 모든 옵션을 보여주는 것이 아니므로 필요할 경우 특정 옵션은 직접 지정해야 할 수도 있다. 마지막으로 생성된 Makefile을 이용하여 빌드하자.

make -j4

j 옵션 다음에 붙은 숫자는 동시에 몇 개의 job을 컴파일할지를 의미한다. 사용할 경우 두 개 이상의 쓰레드가 사용된다.

컴파일이 잘 되었는지 확인 해 보고 싶다면 다음 명령을 수행해 본다.

make test

마지막으로 다음 명령어로 컴파일된 binary들을 옮기자.

sudo make install

시스템 폴더에 설치되므로 sudo 명령어를 붙여야 한다.