본문으로 건너뛰기

OpenCV installation

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

License: 3-clause BSD License

Dependencies

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 메모리로 등록합니다.

build

make
정보

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

CoreDiskRAMSwapCommand
4 core(Odroid C1+)16 GB0.8 GB3.0 GBmake -j4
4 core(Rpi 3B+)16 GB0.8 GB3.0 GBmake -j4
4 core(Rpi 4B+)16 GB3.7 GB1.0 GBmake -j4
4 core(Odroid C2)16 GB1.7 GB2.0 GBmake -j4
6 core(Odroid N2)16 GB1.8 GB1.5 GBmake
6 core(Odroid N2)16 GB1.8 GB2.5 GBmake -j7
6 core(Odroid N2)16 GB3.6 GB0.7 GBmake -j7
8 core(Odroid XU4)16 GB1.9 GB2.5 GBmake -j9

컴파일이 끝나면 할당했던 Swap을 해제하고 생성한 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 --user -U numpy matplotlib

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

python3 -c "import cv2 as cv"