본문 바로가기
프로그래밍/OpenCV

[OPENCV] CMake opencv 샘플 예제

by makepluscode 2021. 10. 3.
반응형

간단한 Cmake opencv 예제

OpenCV dependency 설정이 귀찮다면?

OpenCV application 을 작성하다보면 라이브러리 linking 이나 헤더파일 include 에서 에러가 발생하는 경우가 있다. OpenCV 가 Windows, Linux, Mac 등의 다양한 플랫폼을 지원하고 있고, 세부적인 version 이 많아서 매번 비슷한 빌드 에러 이슈를 경험하기도 해서. 이번에 아주 간단한 Cmake OpenCV 예제를 github 에 기록해둔다.

 

GitHub - makepluscode/opencv-examples

Contribute to makepluscode/opencv-examples development by creating an account on GitHub.

github.com

opencv2/opencv.hpp: No such file or directory

OpenCV application 을 작성하다보면 자주 보는 빌드에러 이다. OpenCV build 시에 include 하는 header 파일의 경로를 찾지 못할때 발생한다. 이를 위해 CMakeLists.txt 에 find_package 로 OpenCV 를 찾고, target_include_directories 로 header 파일 경로를 추가하면, 복잡한 경로 문제를 쉽게 해결할 수 있다.

CMakeList.txt 작성

CMakeList.txt 에 OpenCV 패키지 설정, header include, library linking 정보를 간단하게 작성해보았다.

cmake_minimum_required(VERSION 3.0)

project(hello-opencv)

find_package(OpenCV REQUIRED)

set(
    CMAKE_RUNTIME_OUTPUT_DIRECTORY
    ${CMAKE_HOME_DIRECTORY}
)

add_executable(
    hello-opencv
    src/main.cpp
)

target_include_directories(
    hello-opencv PRIVATE 
    ${OpenCV_INCLUDE_DIRS}
)

target_link_libraries(
    hello-opencv
    ${OpenCV_LIBRARIES}
)

message ("OpenCV_LIBRARIES = " ${OpenCV_LIBRARIES})
message ("OpenCV_INCLUDE_DIRS = " ${OpenCV_INCLUDE_DIRS})

이 CMakeLists.txt 를 실행해보자.

makepluscode@ubuntu:~/hello-opencv/001-hello-opencv$ mkdir build
makepluscode@ubuntu:~/hello-opencv/001-hello-opencv$ cd build/
makepluscode@ubuntu:~/hello-opencv/001-hello-opencv/build$ cmake ../
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr (found version "4.2.0") 
OpenCV_LIBRARIES = opencv_calib3dopencv_coreopencv_dnnopencv_features2dopencv_flannopencv_highguiopencv_imgcodecsopencv_imgprocopencv_mlopencv_objdetectopencv_photoopencv_stitchingopencv_videoopencv_videoioopencv_arucoopencv_bgsegmopencv_bioinspiredopencv_ccalibopencv_datasetsopencv_dnn_objdetectopencv_dnn_superresopencv_dpmopencv_faceopencv_freetypeopencv_fuzzyopencv_hdfopencv_hfsopencv_img_hashopencv_line_descriptoropencv_optflowopencv_phase_unwrappingopencv_plotopencv_qualityopencv_regopencv_rgbdopencv_saliencyopencv_shapeopencv_stereoopencv_structured_lightopencv_superresopencv_surface_matchingopencv_textopencv_trackingopencv_videostabopencv_vizopencv_ximgprocopencv_xobjdetectopencv_xphoto
OpenCV_INCLUDE_DIRS = /usr/include/opencv4
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bginess/hello-opencv/001-hello-opencv/build

find_package 로 OpenCV 패키지를 찾고, OpenCV_LIBRARIES 를 출력해보면 OpenCV 관련 많은 라이브러리 명이 출력된다. OpenCV_INCLUDE_DIRS 를 출력해보면, /usr/include/opencv4 위치에 opencv header 파일이 있다는 것을 알게된다.

OpenCV 이미지 출력 예제

OpenCV 를 이용하여 png 이미지 파일을 읽어서 화면에 출력 한다. 동일한 기능을 GTK, Qt 로 직접 구현하는 경우보다 훨씬 Code가 간단하다. 

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

using namespace cv;
using namespace std;

int main()
{
    cout << "opencv version : " << CV_VERSION << endl;
    
    Mat img;
    img = imread("./img/google.png");
    
    if(!img.empty())
    {
        namedWindow("image");
        imshow("image", img);
        waitKey(0);
    }
    else
    {
    	cout << "imgae not found " << CV_VERSION << endl;
    }

    return 0;
}

터미널에서 make 명령으로 빌드 후에, ./hello-opencv 로 실행 해보자!

관련자료

https://github.com/makepluscode/opencv-examples/tree/master/001-hello-opencv

 

GitHub - makepluscode/opencv-examples

Contribute to makepluscode/opencv-examples development by creating an account on GitHub.

github.com

 

반응형