OpenCV  4.10.0-dev
Open Source Computer Vision
No Matches
Using OpenCV with gcc and CMake

Prev Tutorial: Using OpenCV with gdb-powered IDEs
Next Tutorial: Using OpenCV with Eclipse (plugin CDT)

Original author Ana Huamán
Compatibility OpenCV >= 3.0
This tutorial can contain obsolete information.
We assume that you have successfully installed OpenCV in your workstation.
  • The easiest way of using OpenCV in your code is to use CMake. A few advantages (taken from the Wiki):
    1. No need to change anything when porting between Linux and Windows
    2. Can easily be combined with other tools by CMake( i.e. Qt, ITK and VTK )
  • If you are not familiar with CMake, checkout the tutorial on its website.


Create a program using OpenCV

Let's use a simple program such as DisplayImage.cpp shown below.

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
if ( argc != 2 )
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
Mat image;
image = imread( argv[1], IMREAD_COLOR );
if ( ! )
printf("No image data \n");
return -1;
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
return 0;
n-dimensional dense array class
Definition mat.hpp:812
uchar * data
pointer to the data
Definition mat.hpp:2140
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
"black box" representation of the file storage associated with a file on disk.
Definition core.hpp:102

Create a CMake file

Now you have to create your CMakeLists.txt file. It should look like this:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

Generate the executable

This part is easy, just proceed as with any other project using CMake:

cd <DisplayImage_directory>
cmake .


By now you should have an executable (called DisplayImage in this case). You just have to run it giving an image location as an argument, i.e.:

./DisplayImage lena.jpg

You should get a nice window as the one shown below: