1. 필요 패키지 설치

sudo apt-get install build-essential cmake # C/C++ 컴파일러 관련 라이브러리 및 도구
sudo apt-get install pkg-config # 컴파일 및 링크시 필요한 라이브러리 정보를 메타파일로부터 가져옴 
sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev # 이미지 파일 로드 및 저장
sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev # 특정 코덱의 비디오 파일 읽기/쓰기
sudo apt-get install libv4l-dev v4l-utils # 실시간 웹캠 비디오 캡처를 위한 디바이스 드라이버 및 API
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev # 비디오 스트리밍 라이브러리 설치 (Gstreamer)
sudo apt-get install libgtk-3-dev # opencv GUI (이외: libgtk2.0-dev, libqt4-dev, libqt5-dev)
sudo apt-get install libatlas-base-dev gfortran libeigen3-dev # OpenCV 최적화 라이브러리
sudo apt-get install python3-dev python3-numpy # OpenCV-Python 바인딩 & 행렬 연산
sudo apt-get install libfreetypes6-dev libharfbuzz-dev # opencv 한글 지원
sudo apt install unzip

 

2. OpenCV 소스코드 내려받기

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

 

3. CMake Setup

cd ./opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \\
-D CMAKE_INSTALL_PREFIX=/usr/local \\
-D WITH_TBB=OFF \\
-D WITH_IPP=OFF \\
-D WITH_1394=OFF \\
-D BUILD_WITH_DEBUG_INFO=OFF \\
-D BUILD_DOCS=OFF \\
-D BUILD_EXAMPLES=OFF \\
-D BUILD_TESTS=OFF \\
-D BUILD_PERF_TESTS=OFF \\
-D WITH_CUDA=ON \\
-D WITH_CUDNN=ON \\
-D OPENCV_DNN_CUDA=ON \\
-D CUDA_FAST_MATH=ON \\
-D CUDA_ARCH_BIN=7.5 \\    # 자신 GPU의 compute capability 값
-D WITH_CUBLAS=ON \\
-D WITH_CUFFT=ON \\
-D WITH_QT=ON \\
-D WITH_GTK=OFF \\
-D WITH_OPENGL=ON \\
-D WITH_V4L=ON \\
-D WITH_FFMPEG=ON \\
-D WITH_XINE=ON \\
-D BUILD_NEW_PYTHON_SUPPORT=ON \\
-D INSTALL_C_EXAMPLES=OFF \\
-D INSTALL_PYTHON_EXAMPLES=OFF \\
-D OPENCV_GENERATE_PKGCONFIG=ON \\
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \\
-D OPENCV_ENABLE_NONFREE=ON \\
-D BUILD_EXAMPLES=OFF ..
nproc # 자신 시스템의 코어 수 확인

# build (modify the core number '12' after option -j accordingly)
make -j8 # 자신 시스템 코어 수에 맞게 -j 다음의 숫자를 변경

# install
sudo make install

# check if it is installed successfully
pkg-config --modversion opencv4

 

4. 설치 확인

4.1 OpenCV 동작 여부 확인

아래 코드를 test.cpp라는 파일명으로 저장

#include "opencv2/opencv.hpp"
#include <iostream>  
  
using namespace cv;  
using namespace std;  
  
int main(int, char**)
{
    VideoCapture cap(0);
    if (!cap.isOpened()){
        printf("카메라를 열수 없습니다. \\n");
    }
  
    Mat frame;
    namedWindow("camera1", 1);
    for (;;) 
    {
        cap >> frame;
        imshow("camera1", frame);
        if (waitKey(20) >= 0) break;
    }
    return 0;  
}

아래 내용을 복사해 CMakeLists.txt로 저장

get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
project(${ProjectId} C CXX)

set (CMAKE_CXX_STANDARD 11)
cmake_minimum_required(VERSION 2.8)
find_package( OpenCV REQUIRED )

file(GLOB SOURCES  *.cpp)
 
add_executable(${PROJECT_NAME} ${SOURCES}  )
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} )

CMake → Make → 실행

mkdir buld && cd build
cmake ../
make
./test

 

4.2 OpenCV GPU 사용 가능 여부 확인

아래 코드를 gpu.cpp라는 파일명으로 저장

#include <iostream>
using namespace std;

#include <opencv2/core.hpp>
using namespace cv;

#include <opencv2/cudaarithm.hpp>
using namespace cv::cuda;

int main()
{
    printShortCudaDeviceInfo(getDevice());

    int cuda_devices_numbers = getCudaEnabledDeviceCount();
    cout << "CUDA Device(s) Compatible: "  << cuda_devices_numbers << endl;
    DeviceInfo _deviceInfo;

    bool _isd_evice_compatible = _deviceInfo.isCompatible();
    cout << "CUDA Device(s) Compatible: " << _isd_evice_compatible << endl;

    return 0;
}

빌드

g++ -o gpu gpu.cpp $(pkg-config opencv4 --libs --cflags)

실행 결과에서 Number와 Compatible에서 모두 1이 나오면 GPU 동작 수행 가능

 

만약 1이 나오지 않는다면 설치과정 3의 옵션 중 아래 두 옵션의 수를 잘못 기입한 것임.

-D CUDA_ARCH_BIN=x.x

-D CUDA_ARCH_PTX=x.x

이를 해결하기 위해 해당 그래픽 카드에 맞는 버전으로 기입해줄 것

 

Reference

[1] https://darkpgmr.tistory.com/184

[2] https://webnautes.tistory.com/1767

[3] https://webnautes.tistory.com/1435

[4] https://mickael-k.tistory.com/211

+ Recent posts