얼마전에 Ubuntu 18.04 LTS 버전이 나왔습니다. 그래서 오늘은 Ubuntu 18.04 에서 OpenCV 최신 버전을 설치하는 방법에 대해 알아보도록 하겠습니다. 예전에 라즈베리파이에서 OpenCV를 설치하는 방법을 설명한 적이 있었는데요, 거기서 크게 다르지 않습니다.


일단 저는 Virtual Box를 이용하여 가상 머신 형태로 리눅스 우분투 18.04를 설치를 했구요, 여기에 OpenCV 3.4.0 버전을 설치하겠습니다. (참고로 CPU 코어는 2개를 할당했습니다.) 모두 5개의 Step으로 설치를 설명하고, 실제 OpenCV C++ 예제 코드를 빌드하여 실행하는 방법까지 알아보겠습니다. 각각의 Step에서 #으로 시작하는 내용은 설명을 의미하고, 실제 입력할 명령어는 $ 으로 표기하였습니다.


Step 1. 가장 먼저 리눅스를 최신 상태로 업데이트합니다.

# Optional. Ubuntu 18.04에서 libjasper-dev 패키지를 설치하기 위해서 저장소를 추가해야 합니다.
$ sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"

$ sudo apt update
$ sudo apt upgrade

# Optional. Ubuntu 18.04 설치 후 추가적으로 필요한 코덱, 미디어 라이브러리를 설치합니다.
$ sudo apt install ubuntu-restricted-extras


Step 2. 필요한 패키지를 설치합니다.

# Build tools & required
$ sudo apt install build-essential cmake git pkg-config

# For still images
$ sudo apt install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev

# For videos
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev
$ sudo apt install libdc1394-22-dev libxvidcore-dev libx264-dev x264
$ sudo apt install libxine2-dev libv4l-dev v4l-utils
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

# GUI
$ sudo apt install libgtk-3-dev

# Optimization, Python3, etc.
$ sudo apt install libatlas-base-dev libeigen3-dev gfortran
$ sudo apt install python3-dev python3-numpy libtbb2 libtbb-dev


Step 3. OpenCV 3.4.0 소스 코드를 다운로드합니다.

# Create a working directory named opencv
$ cd ~
$ mkdir opencv
$ cd opencv

# Download sources
$ wget -O opencv-3.4.0.zip https://github.com/opencv/opencv/archive/3.4.0.zip
$ wget -O opencv_contrib-3.4.0.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip

# Unpack
$ unzip opencv-3.4.0.zip
$ unzip opencv_contrib-3.4.0.zip


Step 4. CMake를 이용하여 Makefile을 생성합니다.

# Create a build directory
$ mkdir build && cd build

# Run CMake
$ cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_EXAMPLES=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
../opencv-3.4.0/ 2>&1 | tee cmake_messages.txt


Step 5. 컴파일과 설치를 진행합니다.

# find out the number of CPU cores in your machine
$ nproc

# substitute 2 after -j by the output of nproc
$ make -j2 2>&1 | tee build_messages.txt
$ sudo make install
$ sudo ldconfig

# If the output of next command is '3.4.0' then it's ok!
$ pkg-config --modversion opencv


여기까지 설치가 잘 진행되었으면 이제 OpenCV 예제 프로그램을 만들어서 정상적으로 동작하는지를 확인해보겠습니다. 일단 홈디렉토리 아래에 ~/coding/HelloCV 라는 디렉토리를 만들고, 그 안에 HelloCV.cpp 파일을 아래와 같이 작성합니다.


#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(void)
{
        Mat img = imread("lena.jpg");

        if (img.empty()) {
                cerr << "Image load failed!" << endl;
                return -1;
        }

        namedWindow("image");
        imshow("image", img);
        waitKey(0);
        return 0;
}


그리고 위 소스 코드를 빌드하기 위한 Makefile 파일을 아래와 같이 생성합니다. 아래 코드에서 들여쓰기(인덴트)는 스페이스가 아니라 탭(tab)입니다.


CC = g++
CFLAGS = -g -Wall
SRCS = HelloCV.cpp
PROG = HelloCV

OPENCV = `pkg-config opencv --cflags --libs`
LIBS = $(OPENCV)

.PHONY: all clean

$(PROG):$(SRCS)
    $(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)

all: $(PROG)

clean:
    rm -f $(OBJS) $(PROG)


위와 같이 입력하고, $ make 명령어를 입력하면 HelloCV 라는 이름의 실행 파일이 생성됩니다. 그러므로 $ ./HelloCV 라고 명령어를 입력하면 프로그램이 실행되는데요.. 에러만 출력되고 종료됩니다. 왜냐하면 테스트로 사용하는 lena.jpg 파일이 없어서죠. 그러므로 opencv 소스 코드에 포함되어 있는 lena.jpg 파일을 현재 폴더로 복사합니다.

$ cp ~/opencv/opencv-3.4.0/samples/data/lena.jpg .


그리고 다시 $ ./HelloCV 명령을 입력합니다. 그러면 아래 그림처럼 lena 영상이 화면에 나타납니다. 


참 쉽죠? :-)

Posted by kkokkal

댓글을 달아 주세요

  1. Favicon of https://bethetop.tistory.com 비더탑 2018.06.13 21:23 신고 Address Modify/Delete Reply

    자료 감사합니다. 덕분에 리눅스에 편히 openCV를 설치 후 확인까지 했습니다.

  2. jr 2019.03.26 18:34 Address Modify/Delete Reply

    안녕하세요 좋은 글 감사합니다.
    저는 설치중에 step5부터 오류가 납니다.

    user2@user:~/opencv/build$ make -j2 2>&1 | tee build_messages.txt
    [ 10%] Built target gen-pkgconfig
    [ 10%] Built target libwebp
    [ 10%] Built target ittnotify
    [ 10%] Built target IlmImf
    [ 10%] Built target opencv_cudev
    [ 10%] Built target opencv_ts_pch_dephelp
    [ 10%] Built target opencv_core_pch_dephelp
    [ 10%] Built target libprotobuf
    [ 10%] Built target opencv_imgcodecs_pch_dephelp
    [ 10%] Built target opencv_imgproc_pch_dephelp
    [ 10%] Built target opencv_highgui_pch_dephelp
    [ 10%] Built target opencv_videoio_pch_dephelp
    [ 10%] Built target opencv_perf_core_pch_dephelp
    [ 10%] Built target opencv_test_core_pch_dephelp
    [ 10%] Built target opencv_test_cudaarithm_pch_dephelp
    [ 10%] Built target opencv_cudaarithm_pch_dephelp
    [ 10%] Built target opencv_perf_cudaarithm_pch_dephelp
    [ 10%] Built target opencv_flann_pch_dephelp
    [ 10%] Built target opencv_test_flann_pch_dephelp
    [ 10%] Built target opencv_perf_imgproc_pch_dephelp
    [ 10%] Built target opencv_test_imgproc_pch_dephelp
    [ 10%] Built target opencv_test_ml_pch_dephelp
    [ 10%] Built target opencv_ml_pch_dephelp
    [ 10%] Built target opencv_test_objdetect_pch_dephelp
    [ 10%] Built target opencv_objdetect_pch_dephelp
    [ 10%] Built target opencv_perf_objdetect_pch_dephelp
    [ 10%] Built target opencv_test_phase_unwrapping_pch_dephelp
    [ 10%] Built target opencv_phase_unwrapping_pch_dephelp
    [ 10%] Built target opencv_plot_pch_dephelp
    [ 10%] Built target opencv_test_reg_pch_dephelp
    [ 10%] Built target opencv_reg_pch_dephelp
    [ 10%] Built target opencv_perf_reg_pch_dephelp
    [ 10%] Built target opencv_surface_matching_pch_dephelp
    [ 10%] Built target opencv_test_video_pch_dephelp
    [ 10%] Built target opencv_perf_video_pch_dephelp
    [ 10%] Built target opencv_video_pch_dephelp
    [ 10%] Built target opencv_perf_xphoto_pch_dephelp
    [ 10%] Built target opencv_test_xphoto_pch_dephelp
    [ 10%] Built target opencv_cudabgsegm_pch_dephelp
    [ 10%] Built target opencv_test_cudabgsegm_pch_dephelp
    [ 10%] Built target opencv_perf_cudabgsegm_pch_dephelp
    [ 10%] Built target opencv_perf_cudafilters_pch_dephelp
    [ 10%] Built target opencv_test_cudafilters_pch_dephelp
    [ 10%] Built target opencv_cudafilters_pch_dephelp
    [ 10%] Built target pch_Generate_opencv_perf_cudafilters
    [ 10%] Built target opencv_test_cudaimgproc_pch_dephelp
    [ 10%] Built target opencv_perf_cudaimgproc_pch_dephelp
    [ 10%] Built target opencv_cudaimgproc_pch_dephelp
    [ 10%] Built target pch_Generate_opencv_test_cudaimgproc
    [ 10%] Built target opencv_test_cudawarping_pch_dephelp
    [ 10%] Built target opencv_cudawarping_pch_dephelp
    [ 10%] Built target opencv_perf_cudawarping_pch_dephelp
    [ 10%] Built target opencv_test_dnn_pch_dephelp
    [ 10%] Built target opencv_dnn_pch_dephelp
    [ 10%] Built target opencv_perf_dnn_pch_dephelp
    [ 10%] Built target opencv_freetype_pch_dephelp
    [ 10%] Built target opencv_test_fuzzy_pch_dephelp
    [ 10%] Built target opencv_fuzzy_pch_dephelp
    [ 10%] Built target opencv_img_hash_pch_dephelp
    [ 10%] Built target opencv_test_img_hash_pch_dephelp
    [ 10%] Built target opencv_test_imgcodecs_pch_dephelp
    [ 10%] Built target opencv_perf_imgcodecs_pch_dephelp
    [ 10%] Built target opencv_test_photo_pch_dephelp
    [ 10%] Built target opencv_photo_pch_dephelp
    [ 10%] Built target opencv_perf_photo_pch_dephelp
    [ 10%] Built target opencv_shape_pch_dephelp
    [ 10%] Built target opencv_test_shape_pch_dephelp
    [ 10%] Built target opencv_perf_videoio_pch_dephelp
    [ 10%] Built target opencv_test_videoio_pch_dephelp
    [ 10%] Built target opencv_xobjdetect_pch_dephelp
    [ 10%] Building CXX object modules/cudacodec/CMakeFiles/opencv_cudacodec_pch_dephelp.dir/opencv_cudacodec_pch_dephelp.cxx.o
    Scanning dependencies of target opencv_test_cudacodec_pch_dephelp
    [ 10%] Building CXX object modules/cudacodec/CMakeFiles/opencv_test_cudacodec_pch_dephelp.dir/opencv_test_cudacodec_pch_dephelp.cxx.o
    In file included from /home/user2/opencv/build/modules/cudacodec/opencv_cudacodec_pch_dephelp.cxx:1:
    /home/user2/opencv/opencv-3.4.0/modules/cudacodec/src/precomp.hpp:60:18: fatal error: dynlink_nvcuvid.h: 그런 파일이나 디렉터리가 없습니다
    #include <dynlink_nvcuvid.h>
    ^~~~~~~~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [modules/cudacodec/CMakeFiles/opencv_cudacodec_pch_dephelp.dir/build.make:63: modules/cudacodec/CMakeFiles/opencv_cudacodec_pch_dephelp.dir/opencv_cudacodec_pch_dephelp.cxx.o] 오류 1
    make[1]: *** [CMakeFiles/Makefile2:10679: modules/cudacodec/CMakeFiles/opencv_cudacodec_pch_dephelp.dir/all] 오류 2
    make[1]: *** 끝나지 않은 작업을 기다리고 있습니다....
    [ 10%] Linking CXX static library ../../lib/libopencv_test_cudacodec_pch_dephelp.a
    [ 10%] Built target opencv_test_cudacodec_pch_dephelp
    make: *** [Makefile:163: all] 오류 2

    이렇게 되는데 이유를 모르겠습니다 ㅠㅠ
    그전 cmake 만드는 것까진 됩니다
    도움 부탁드려요

    우분투 18.10, 쿠다 10.0 입니당..

    • Favicon of https://kkokkal.tistory.com kkokkal 2019.03.28 09:59 신고 Address Modify/Delete

      아마도 쿠다 때문일텐데요.. 저는 리눅스에서 쿠다 설정해서 빌드를 해 본적이 없네요.
      https://docs.opencv.org/trunk/d6/d15/tutorial_building_tegra_cuda.html
      위 링크에서 쿠다 관련 부분을 참고해보세요.

  3. Favicon of https://hyunuk9296.tistory.com 혀누기얌 2019.07.25 16:36 신고 Address Modify/Delete Reply

    안녕하세요. 위에 글을 보고 설치를 했는데.
    설치후에 계속해서 잠금파일을 얻을 수 없습니다 라고 뜨는데 왜 그런가요?

  4. Favicon of https://hyunuk9296.tistory.com 혀누기얌 2019.07.25 17:48 신고 Address Modify/Delete Reply

    위에 문제 해결했습니다.
    마지막 단계에서 Makefile 생성하고 나서
    저장하고 :make 명령 날리면 리눅스 창에서 Makefile:13: *** 분리 기호가 빠졌음. 멈춤.
    이라는 에러가 뜸니다.

  5. 아아 2019.12.04 10:00 Address Modify/Delete Reply

    오류나시는분들 cuda를 삭제하고 설치하면 오류가 안납니다.

  6. 지나가는사람 2021.01.15 11:17 Address Modify/Delete Reply

    제 경우에는 cudacodec 쪽에서 에러가 나더라구요. 저는 cuda 11.0 사용중이었고 삭제해도 안됐습니다.

    해결방법
    - cudacodec을 사용하지 않아도 되서 -DBUILD_opencv_cudacodec=Off 옵션을 주고 컴파일하니 잘 되더라구요