OpenCV Installation

Ref: https://docs.opencv.org/master/

License: 3-clause BSD License

Installing packages before building

build-essential, cmake, git, libgtk2.0-dev, pkg-config, libavcodec-dev, libavformat-dev, libswscale-dev를 제외한 나머지는 옵션입니다.

아래 설명에 나오는 패키지를 한 번에 설치하려면 아래 명령어를 실행하시면 됩니다.

wget https://raw.githubusercontent.com/hhk7734/conf/master/opencv/package_install.sh package_install.sh ;\
sleep 1 &&\
sudo chmod +x package_install.sh &&\
./package_install.sh

Update

sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

Python

sudo apt install -y python-dev python3-dev python3-pip &&\
python3 -m pip install -U pip &&\
python3 -m pip install --user numpy

GCC, CMake, git

sudo apt install -y build-essential cmake git

GUI, GL

sudo apt install -y libgtk2.0-dev libgtk-3-dev libqt4-dev &&\
sudo apt install -y mesa-utils libgl1-mesa-dri libqt4-opengl-dev

pkg-config

sudo apt install -y pkg-config

FFmpeg

sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev

parallelism

sudo apt install -y libtbb2 libtbb-dev

Image codec

sudo apt install -y libjasper-dev ;\
sudo apt install -y libjpeg-dev libtiff5-dev &&\
sudo apt install -y libpng12-dev || sudo apt install -y libpng-dev

libjasper-dev 설치를 실패한 경우, https://github.com/mdadams/jasper에서 소스를 받아 직접 빌드하여 설치해도 됩니다.

설치하지 않고 넘어가면, OpenCV가 빌드될 때 빌드됩니다.

Video codec

sudo apt install -y libxvidcore-dev &&\
sudo apt install -y libx264-dev &&\
sudo apt install -y libxine2-dev &&\
sudo apt install -y libv4l-dev v4l-utils

Streaming

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

IEEE 1394 digital camera

sudo apt install -y libdc1394-22-dev

Mathmatic

sudo apt install -y gfortran libatlas-base-dev libeigen3-dev libhdf5-serial-dev

Building OpenCV from Source Using CMake

Donwload source

cd && git clone https://github.com/opencv/opencv.git
cd && git clone https://github.com/opencv/opencv_contrib.git

opencv_contrib는 옵션입니다. 2019-04-08 기준으로 2.4.13.6, 3.4.6, 4.1.0이 최신 버전입니다. 위 명령을 통해 다운받는 경우 가장 최신 릴리즈를 받게 됩니다.

다른 버전을 받고 싶은 경우 위와같이 clone 후에 branch와 tag를 확인합니다.

git branch -a
git tag -l --sort=-v:refname

확인된 버전 중에 원하는 버전으로 checkout 합니다.

cd ~/opencv &&\
git checkout tags/4.1.0

cd ~/opencv_contrib &&\
git checkout tags/4.1.0

CMake

CMake를 통해 Makefile을 만들 때, 사용하는 옵션에 따라 추가적으로 설치할 라이브러리가 있을 수 있습니다.

매크로 설정을 통해 설정을 변경할 수 있습니다.

  • -DOPENCV_PYTHON_SKIP_DETECTION=ON: Python 패키지 설치 안함
  • -DOPENCV_EXTRA_MODULES_PATH=<path>/opencv_contrib/modules: OpenCV extra module 설치
cd ~/opencv &&\
mkdir build &&\
cd build &&
cmake ..\
    -DCMAKE_BUILD_TYPE=Release \
    -DOPENCV_GENERATE_PKGCONFIG=ON \
    -DBUILD_PERF_TESTS=OFF

Checking memory size and swapon

컴파일하기 전에 메모리 크기가 최소 3 GB가 되는지 확인해야합니다.

free -ht
              total        used        free      shared  buff/cache   available
Mem:           1.8G        635M        219M         29M        1.0G        1.2G
Swap:            0B          0B          0B
Total:         1.8G        635M        219M

메모리가 부족한 경우 swap 메모리를 추가해야합니다. 컴파일 속도를 올리기 위해 make에서 -j[N-jobs] 옵션을 사용하는 경우 N-jobs 값에 따라 필요한 메모리 크기가 달라집니다.

필요한 크기만큼 swapfile 크기를 정한 다음 swap 메모리로 등록합니다.

sudo fallocate -l 1.2G /swapfile
sudo chmod 600 /swapfile &&\
sudo mkswap /swapfile &&\
sudo swapon /swapfile

build

make

메모리와 디스크 크기가 충분한 경우 빠른 컴파일을 위해 make 대신 make -j$(expr $(expr $(nproc) \* 6) \/ 5) 명령어를 실행하는 것이 좋습니다.

Core Disk RAM Swap Command
4 core(Odroid C1+) 16 GB 0.8 GB 2.4 GB make -j4
4 core(Rpi 3B+) 16 GB 0.8 GB 2.4 GB make -j4
4 core(Odroid C2) 16 GB 1.7 GB 1.6 GB make -j4
6 core(Odroid N2) 16 GB 1.8 GB 1.0 GB make
6 core(Odroid N2) 16 GB 1.8 GB 1.5 GB make -j7
6 core(Odroid N2) 16 GB 3.6 GB 0 GB make -j7
8 core(Odroid XU4) 16 GB 1.9 GB 1.4 GB make -j9

컴파일이 끝나면 할당했던 Swap을 해제하고 생성한 swapfile을 삭제해 줍니다.

sudo swapoff /swapfile &&\
sudo rm /swapfile

생성된 라이브러리를 설치합니다.

sudo make install &&\
sudo ldconfig

C++

sudo find / -name opencv* | grep .pc
/usr/local/lib/pkgconfig/opencv4.pc

opencv 4.x 가 설치된 경우 opencv4.pc가 생성됩니다. 해당 파일에 라이브러리 정보, 경로가 설정되어 있으므로 아래와 같이 컴파일 할 수 있습니다.

g++ -o [output] [input] $(pkg-config opencv4 --libs --cflags)

Python

virtual environment

가상환경을 생성합니다.

python3 -m venv [venv_path]

유저 라이브러리로 설치된 cv2 패키지 경로를 확인합니다.

sudo find / -name cv2 -type d
/usr/local/lib/python3.6/dist-packages/cv2

위에서 확인한 cv2 패키지를

sudo cp -r /usr/local/lib/python3.6/dist-packages/cv2 [venv_path]/lib/python3.6/site-packages/

가상 환경을 활성화합니다.

source [venv_path]/bin/activate

OpenCV를 사용할 때, numpy와 matplotlib를 같이 사용하게 됩니다. (numpy는 필수고, matplotlib은 선택사항입니다.)

python3 -m pip install -U pip &&\
python3 -m pip install numpy matplotlib

python에 OpenCV 모듈이 정상적으로 로딩되는지 확인하기 위해 아래 명령어를 사용하면 됩니다.

python3 -c "import cv2 as cv"