간단한 Cmake opencv 예제
OpenCV dependency 설정이 귀찮다면?
OpenCV application 을 작성하다보면 라이브러리 linking 이나 헤더파일 include 에서 에러가 발생하는 경우가 있다. OpenCV 가 Windows, Linux, Mac 등의 다양한 플랫폼을 지원하고 있고, 세부적인 version 이 많아서 매번 비슷한 빌드 에러 이슈를 경험하기도 해서. 이번에 아주 간단한 Cmake OpenCV 예제를 github 에 기록해둔다.
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
'프로그래밍 > OpenCV' 카테고리의 다른 글
[OPENCV] SGBM vs StereoBM 깊이맵 결과 비교 (1) | 2022.06.15 |
---|---|
[OPENCV] 스테레오 깊이맵 성능 높이기 (0) | 2022.06.15 |
[OPENCV] GSTREAMER 를 이용한 이미지 캡처 (0) | 2022.06.13 |
[OPENCV] 스테레오 카메라 StereoBM 예제 첫번째 (0) | 2022.06.12 |
[OPENCV] Ubuntu 18.04 OpenCV 4.2.0 설치하기 (0) | 2022.06.10 |
[OPENCV] MAT 클래스 type 이해하기 (0) | 2022.06.10 |
[OPENCV] 여러개 이미지 합성 + 합치기 C++ 예제 (0) | 2022.06.09 |
[OPENCV] Ubuntu 20.04 OpenCV 4.0.0 설치하기 (0) | 2022.04.03 |