Post

03. CMake Tutorial with OpenCV

03. CMake Tutorial with OpenCV

CMake with OpenCV


Prerequisites


1. How to use CMake with OpenCV?

main opencv: https://github.com/opencv/opencv sub opencv: https://github.com/opencv/opencv_contrib

1
2
3
4
5
6
rmdir /s /q C:\opencv\opencv_build
mkdir C:\opencv\opencv_build
cd /d C:\opencv\opencv
cmake --preset opencv 
cmake --build C:\opencv\opencv_build --config Release
cmake --build C:\opencv\opencv_build --config Release --target INSTALL

2. Tutorial

2-1. Project Structure

1
2
3
4
5
C:\opencv\
 ├─ opencv              // opencv main library
 ├─ opencv_build        // for build
 ├─ opencv_contrib      // opencv sub library
 └─ opencv_install      // for install
1
2
3
4
5
opencv_build   = build workspace (temporary)
opencv_install = final usable OpenCV package

build  = compile
install = organize + copy

After finishing install

1
2
3
4
5
6
C:\opencv\opencv_install\
 ├─ include
 └─ x64
     └─ vc17
         ├─ lib
         └─ bin

2-2. Context

Json, Name is “CMakePresets.json”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "version": 3,
  "configurePresets": [
    {
      "name": "opencv",
      "generator": "Visual Studio 17 2022",
      "binaryDir": "C:/opencv/opencv_build",
      "architecture": {
        "value": "x64"
      },
      "cacheVariables": {
        "CMAKE_INSTALL_PREFIX": "C:/opencv/opencv_install",
        "OPENCV_EXTRA_MODULES_PATH": "C:/opencv/opencv_contrib/modules",
        "BUILD_opencv_world": "ON",
        "BUILD_TESTS": "OFF",
        "BUILD_PERF_TESTS": "OFF",
        "BUILD_EXAMPLES": "OFF",
        "BUILD_DOCS": "OFF",
        "BUILD_JAVA": "OFF",
        "BUILD_opencv_python2": "OFF",
        "BUILD_opencv_python3": "OFF",
        "OPENCV_PYTHON_SKIP_DETECTION": "ON"
      }
    }
  ]
}

CMakeLists, For build and install opencv

It already created in opencv folder files, just using

CMakeLists, For creating test real project

1
2
3
4
5
6
7
8
9
10
11
12
13
cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(OpenCV_DIR "C:/opencv/opencv_install/x64/vc17/lib")

find_package(OpenCV REQUIRED)

add_executable(OpenCVTest main.cpp)

target_link_libraries(OpenCVTest PRIVATE ${OpenCV_LIBS})

Main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    cv::Mat img = cv::Mat::zeros(300, 500, CV_8UC3);

    cv::putText(
        img,
        "OpenCV Install OK",
        cv::Point(40, 150),
        cv::FONT_HERSHEY_SIMPLEX,
        1.0,
        cv::Scalar(0, 255, 0),
        2
    );

    cv::imshow("Test", img);
    cv::waitKey(0);

    return 0;
}

2-3. Context Detail

1. set(CMAKE_CXX_STANDARD 17)
  • the compiler to use C++17
2. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  • Enforces strict requirement

    • OFF → compiler may downgrade (e.g., C++14)
    • ON → fails if C++17 is not supported
3. set(OpenCV_DIR "C:/opencv/opencv_install/x64/vc17/lib")
  • Look here to find OpenCV
4. find_package(OpenCV REQUIRED)
  • Loads OpenCV into CMake
  • find OpenCVConfig.cmake → Create OpenCV_LIBS etc..
  • Links OpenCV libraries to your executable

2-4. Set Environment

Add to PATH:

1
C:\opencv\opencv_install\x64\vc17\bin
1
2
3
4
C:\Users\...\Desktop\CMakeTest\Project\
 ├─ build
 ├─ CMakeLists.txt
 └─ main.cpp
1
2
3
4
cd /d "C:\Users\...\Desktop\CMakeTest\Project03"

cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
1
build\Release\OpenCVTest.exe
This post is licensed under CC BY 4.0 by the author.