더북(TheBook)

B.2 리눅스에서 OpenCV 프로그램 개발하기

 

 

이 절에서는 OpenCV 라이브러리가 설치된 리눅스 윈도우 환경에서 OpenCV 예제 프로그램을 만들고 실행하는 방법에 대해 알아보겠습니다. 예제로 만들어 볼 프로그램은 2.2.2절에서 설명한 HelloCV 예제 프로그램 소스를 사용하겠습니다. 일단 홈 디렉터리 아래에 ~/HelloCV 디렉터리를 만들고, 그 안에 main.cpp 파일을 코드 B-1과 같이 작성합니다.

$ cd ~
$ mkdir HelloCV
$ cd HelloCV
$ pico main.cpp

 

참고로 앞에 나타낸 명령어에서는 pico 편집기를 사용하였지만, vi 등의 다른 편집기를 사용해도 무방합니다. pico 편집기를 사용하는 경우라면 코드 B-1에 나타난 소스 코드를 모두 입력하고, Ctrl+X 키를 누르고 파일을 저장한 후 종료하세요.

코드 B-1 HelloCV 소스 코드 main.cpp 파일 [appx/HelloCV]1

01    #include "opencv2/opencv.hpp"
02    #include <iostream>
03     
04    using namespace cv;
05    using namespace std;
06     
07    int main()
08    {
09        cout << "Hello OpenCV " << CV_VERSION << endl;
10     
11        Mat img;
12        img = imread("lena.jpg");
13     
14        if (img.empty()) {
15            cerr << "Image load failed!" << endl;
16            return -1;
17        }
18     
19        namedWindow("image");
20        imshow("image", img);
21     
22        waitKey(0);
23        return 0;
24    }

 

리눅스에서 C++ 소스 코드를 빌드하기 위해서는 Makefile 파일이 필요합니다. 그리고 Makefile 파일은 CMake 프로그램을 이용하여 생성할 수 있습니다. 이때 Makefile 파일 생성에 필요한 사항을 CMakeLists.txt 텍스트 파일로 지정해야 합니다. HelloCV 예제 프로그램의 Makefile 파일 생성을 위한 CMakeLists.txt 파일 내용을 코드 B-2에 나타냈습니다. 이 파일도 pico 등의 편집기를 이용하여 생성하세요.

$ pico CMakeLists.txt

 

코드 B-2 HelloCV CMakeLists.txt 파일 [appx/HelloCV]

01    cmake_minimum_required(VERSION 2.8)
02    project(HelloCV)
03    find_package(OpenCV REQUIRED)
04    include_directories(${OpenCV_INCLUDE_DIRS})
05    add_executable(HelloCV main.cpp)
06    target_link_libraries(HelloCV ${OpenCV_LIBS})

 

코드 B-2에 나타난 CMakeLists.txt 파일 내용 중에서 HelloCV는 프로젝트 이름이자 생성할 실행 파일 이름입니다. 코드 B-2의 5행 add_executable() 괄호 안의 내용은 HelloCV 실행 파일을 만들기 위해 main.cpp 파일이 필요하다는 의미입니다. 만약 여러 개의 소스 파일을 사용할 경우에는 add_executable() 괄호 안에 소스 파일 이름을 빈칸으로 구분하여 모두 입력해야 합니다. CMakeLists.txt 파일을 생성하였다면 다음 두 명령을 입력하여 Makefile 파일을 생성하고, 프로그램을 빌드합니다.

$ cmake .
$ make

 

OpenCV 라이브러리가 정상적으로 설치되었고, main.cpp 파일과 CMakeLists.txt 파일에 오타가 없다면 정상적으로 HelloCV 실행 파일이 생성될 것입니다. 그러므로 ./HelloCV 명령어를 입력하여 프로그램을 실행시킬 수 있습니다. 다만 코드 B-1에서 imread() 함수로 lena.jpg 영상 파일을 불러오도록 하였지만, 이 파일이 현재 디렉터리에 없는 상태입니다. lena.jpg 파일은 OpenCV 소스 코드 폴더에서 복사해서 사용할 수 있습니다. 다음 명령어를 입력하여 OpenCV 소스 코드 폴더에 있는 lena.jpg 영상 파일을 현재 디렉터리로 복사하세요.

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

 

이제 HelloCV 프로그램을 실행할 준비가 다 되었습니다. 터미널 창에 ./HelloCV 명령어를 입력하면 그림 B-2와 같이 lena.jpg 레나 영상이 화면에 나타납니다. HelloCV 프로그램은 image 창에서 키보드의 아무 키나 누르면 종료합니다.

$ ./HelloCV

 

▲ 그림 B-2 리눅스에서 HelloCV 프로그램 실행 결과 화면

 

지금까지 리눅스에서 OpenCV 라이브러리를 빌드하여 설치하고, 사용하는 방법에 대해 설명했습니다. 이 책 본문에서 설명한 모든 OpenCV 예제 프로그램은 리눅스 환경에서도 동일하게 동작합니다. 각각의 예제 프로젝트에 대해 적절한 CMakeLists.txt 파일을 이용하여 Makefile 파일을 만들고, 프로그램을 빌드하여 테스트해 보기 바랍니다.

Note

OpenCV 예제 프로그램을 만들 때마다 CMakeLists.txt 파일을 만들고 CMake 프로그램으로 Makefile을 만드는 것이 귀찮게 느껴질 수도 있습니다. 사실 간단한 OpenCV 예제 프로그램을 만드는 경우에는 CMake 프로그램을 이용하여 Makefile 파일을 만드는 것보다 직접 Makefile 파일을 만드는 것이 편리할 수도 있습니다. HelloCV 예제 프로그램을 빌드하기 위한 간단한 형태의 Makefile 예제를 코드 B-3에 나타냈습니다.

코드 B-3 HelloCV 프로젝트 빌드를 위한 Makefile 파일의 예 [appx/HelloCV]

01    CC = g++
02    CFLAGS = -g -Wall
03    SRCS = main.cpp
04    PROG = HelloCV
05     
06    OPENCV = `pkg-config opencv4 --cflags --libs`
07    LIBS = $(OPENCV)
08     
09    .PHONY: all clean
10     
11    $(PROG):$(SRCS)
12        $(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)
13     
14    all: $(PROG)
15     
16    clean:
17        rm -f $(OBJS) $(PROG)

 

코드 B-3에서 주의할 부분은 3행 파일 이름 입력 부분입니다. 만약 여러 개의 소스 파일을 사용한다면 3행 SRCS 변수에 모든 소스 파일 이름을 빈칸으로 구분하여 입력하세요. 4행의 PROG 변수는 생성할 실행 파일 이름을 나타냅니다.

Makefile 파일을 직접 만들 때 주의해야 할 사항은 들여쓰기를 Space 키 대신 Tab 키를 사용해야 한다는 점입니다. 즉, 코드 B-3에서 12행과 17행 앞에 나타나는 공백은 Space 키로 띄우면 안 되고 Tab 키를 이용하여 입력해야 합니다.

 

 

1 코드 B-1에 나타난 소스 코드는 2.2.2절에서 설명한 코드 2-3과 거의 같으며, 다만 불러오는 영상 파일 이름만 lena.jpg로 변경되었습니다. 소스 코드에 대한 자세한 설명은 2.2.2절 설명을 참고하세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.