Getting started with OpenCV 2.4 and MinGW on Windows 7 Getting started with OpenCV 2.4 and MinGW on Windows 7 windows windows

Getting started with OpenCV 2.4 and MinGW on Windows 7


1. Installing OpenCV 2.4.3

First, get OpenCV 2.4.3 from sourceforge.net. Its a self-file-extracting so just double click the file to start installation. Install it in a directory, say C:\.

OpenCV self-extracting

Wait until all files get extracted. It will create a new directory C:\opencv which contains OpenCV header files, libraries, code samples, etc.

Now you need to add C:\opencv\build\x86\mingw\bin directory to your system PATH. This directory contains OpenCV DLLs which is required for running your code.

Open Control PanelSystemAdvanced system settingsAdvanced TabEnvironment variables...

You will see a window like shown below:

Add OpenCV DLL directory to system path

On the System Variables section,
select Path (1), click Edit... (2), add C:\opencv\build\x86\mingw\bin (3) then click Ok.

This will completes the OpenCV 2.4.3 installation on your computer.


2. Installing MinGW compiler suite

I highly recommend you to use gcc (GNU Compiler Collection) for compiling your code. gcc is the compiler suite widely available in Linux systems and MinGW is the native port for Windows.

Download the MinGW installer from Sourceforge.net and double click to start installation. Just follow the wizard and select the directory to be installed, say C:\MinGW.

Select directory in MinGW installation

Select "C Compiler" and "C++ Compiler" to be installed.

Select components to be installed

The installer will download some packages from the internet so you have to wait for a while. After the installation finished, add C:\MinGW\bin to your system path using the steps described before.

Add MinGW bin directory to system path

To test if your MinGW installation is success, open a command-line box and type: gcc. If everything is ok, it will display this message:

gcc: fatal error: no input filescompilation terminated

This completes the MinGW installation, now is the time to write your "Hello, World!" program.


3. Write a sample code

Open your text editor and type the code below and save the file to loadimg.cpp.

#include "opencv2/highgui/highgui.hpp"#include <iostream>using namespace cv;using namespace std;int main(int argc, char** argv){  Mat im = imread(argc == 2 ? argv[1] : "lena.jpg", 1);  if (im.empty())  {    cout << "Cannot open image!" << endl;    return -1;  }  imshow("image", im);  waitKey(0);  return 0;}

Put lena.jpg or any image you like in the same directory with the file above. Open a command-line box and compile the code above by typing:

g++ -I"C:\opencv\build\include" -L"C:\opencv\build\x86\mingw\lib" loadimg.cpp -lopencv_core243 -lopencv_highgui243 -o loadimg

If it compiles successfully, it will create an executable named loadimg.exe.

Type:

loadimg

To execute the program. Result:

The result of your first OpenCV program


4. Where to go from here?

Now that your OpenCV environment is ready, what's next?

  1. Go to the samples dir → C:\opencv\samples\cpp.
  2. Read and compile some code.
  3. Write your own code.


The instructions in @bsdnoobz answer are indeed helpful, but didn't get OpenCV to work on my system.

Apparently I needed to compile the library myself in order to get it to work, and not count on the pre-built binaries (which caused my programs to crash, probably due to incompatibility with my system).

I did get it to work, and wrote a comprehensive guide for compiling and installing OpenCV, and configuring Netbeans to work with it.

For completeness, it is also provided below.


When I first started using OpenCV, I encountered two major difficulties:

  1. Getting my programs NOT to crash immediately.
  2. Making Netbeans play nice, and especially getting timehe debugger to work.

I read many tutorials and "how-to" articles, but none was really comprehensiveand thorough. Eventually I succeeded in setting up the environment; and after awhile of using this (great) library, I decided to write this small tutorial,which will hopefully help others.

The are three parts to this tutorial:

  1. Compiling and installing OpenCV.
  2. Configuring Netbeans.
  3. An example program.

The environment I use is:Windows 7, OpenCV 2.4.0, Netbeans 7 and MinGW 3.20 (with compiler gcc 4.6.2).

Assumptions:You already have MinGW and Netbeans installed on your system.

Compiling and installing OpenCV

When downloading OpenCV, the archive actually already contains pre-builtbinaries (compiled libraries and DLL's) in the 'build' folder. At first, Itried using those binaries, assuming somebody had already done the job ofcompiling for me. That didn't work.

Eventually I figured I have to compile the entire library on my own system inorder for it to work properly.

Luckily, the compilation process is rather easy, thanks to CMake. CMake(stands for Cross-platform Make) is a tool which generates makefiles specificto your compiler and platform. We will use CMake in order to configure ourbuilding and compilation settings, generate a 'makefile', and then compile thelibrary.

The steps are:

  1. Download CMake and install it (in the installation wizard choose to addCMake to the system PATH).
  2. Download the 'release' version of OpenCV.
  3. Extract the archive to a directory of your choice. I will be usingc:/opencv/.
  4. Launch CMake GUI.
    1. Browse for the source directory c:/opencv/.
    2. Choose where to build the binaries. I chose c:/opencv/release.
      CMake Configuration - 1
    3. Click 'Configure'. In the screen that opens choose the generatoraccording to your compiler. In our case it's 'MinGW Makefiles'.
      CMake Configuration - 2
    4. Wait for everything to load, afterwards you will see this screen:
      CMake Configuration - 3
    5. Change the settings if you want, or leave the defaults. When you'redone, press 'Configure' again. You should see 'Configuration done' atthe log window, and the red background should disappear from all thecells.
      CMake Configuration - 4
    6. At this point CMake is ready to generate the makefile with which we willcompile OpenCV with our compiler. Click 'Generate' and wait for themakefile to be generated. When the process is finished you should see'Generating done'. From this point we will no longer need CMake.
  5. Open MinGW shell (The following steps can also be done from Windows' commandprompt).
    1. Enter the directory c:/opencv/release/.
    2. Type mingw32-make and press enter. This should start the compilationprocess.
      MinGW Make
      MinGW Make - Compilation
    3. When the compilation is done OpenCV's binaries are ready to be used.
    4. For convenience, we should add the directory C:/opencv/release/binto the system PATH. This will make sure our programs can find theneeded DLL's to run.

Configuring Netbeans

Netbeans should be told where to find the header files and the compiledlibraries (which were created in the previous section).

The header files are needed for two reasons: for compilation and for codecompletion. The compiled libraries are needed for the linking stage.

Note: In order for debugging to work, the OpenCV DLL's should be available,which is why we added the directory which contains them to the system PATH(previous section, step 5.4).

First, you should verify that Netbeans is configured correctly to work withMinGW. Please see the screenshot below and verify your settings are correct(considering paths changes according to your own installation). Also notethat the make command should be from msys and not from Cygwin.

Netbeans MinGW Configuration

Next, for each new project you create in Netbeans, you should define theinclude path (the directory which contains the header files), the librariespath and the specific libraries you intend to use. Right-click the projectname in the 'projects' pane, and choose 'properties'. Add the include path(modify the path according to your own installation):

Netbeans Project Include Path

Add the libraries path:

Netbeans Libraries Path

Add the specific libraries you intend to use. These libraries will bedynamically linked to your program in the linking stage. Usually you will needthe core library plus any other libraries according to the specific needs ofyour program.

Netbeans Include Libraries

That's it, you are now ready to use OpenCV!

Summary

Here are the general steps you need to complete in order to install OpenCV anduse it with Netbeans:

  1. Compile OpenCV with your compiler.
  2. Add the directory which contains the DLL's to your system PATH (in our case:c:/opencv/release/bin).
  3. Add the directory which contains the header files to your project's includepath (in our case: c:/opencv/build/include).
  4. Add the directory which contains the compiled libraries to you project'slibraries path (in our case: c:/opencv/release/lib).
  5. Add the specific libraries you need to be linked with your project (forexample: libopencv_core240.dll.a).

Example - "Hello World" with OpenCV

Here is a small example program which draws the text "Hello World : )" on a GUIwindow. You can use it to check that your installation works correctly. Aftercompiling and running the program, you should see the following window:

OpenCV Hello World

#include "opencv2/opencv.hpp"#include "opencv2/highgui/highgui.hpp"using namespace cv;int main(int argc, char** argv) {    //create a gui window:    namedWindow("Output",1);    //initialize a 120X350 matrix of black pixels:    Mat output = Mat::zeros( 120, 350, CV_8UC3 );    //write text on the matrix:    putText(output,            "Hello World :)",            cvPoint(15,70),            FONT_HERSHEY_PLAIN,            3,            cvScalar(0,255,0),            4);    //display the image:    imshow("Output", output);    //wait for the user to press any key:    waitKey(0);    return 0;}


This isn't working for me. I spent few days following every single tutorial I found on net and finally i compiled my own binaries. Everyting is described here: OpenVC 2.4.5, eclipse CDT Juno, MinGW error 0xc0000005

After many trials and errors I decided to follow this tutorial and to compile my own binaries as it seems that too many people are complaining that precompiled binaries are NOT working for them. Eclipse CDT Juno was already installed.

My procedure was as follows:

  1. Download and install MinGW and add to the system PATH withc:/mingw/bin
  2. Download cmake from http://www.cmake.org and install it
  3. Download OpenCV2.4.5 Windows version
  4. Install/unzip Opencv to C:\OpenCV245PC\ (README,index.rst and CMakeLists.txt are there with all subfolders)
  5. Run CMake GUI tool, then
  6. Choose C:\OpenCV245PC\ as source
  7. Choose the destination, C:\OpenCV245MinGW\x86 where to build the binaries
  8. Press Configure button, choose MinGW Makefiles as the generator. There are some red highlights in the window, choose options as you need.
  9. Press the Configure button again. Configuring is now done.
  10. Press the Generate button.
  11. Exit the program when the generating is done.
  12. Exit the Cmake program.
  13. Run the command line mode (cmd.exe) and go to the destination directory C:\OpenCV245MinGW\x86
  14. Type "mingw32-make". You will see a progress of building binaries. If the command is not found, you must make sure that the system PATH is added with c:/mingw/bin. The build continues according the chosen options to a completion.
  15. In Windows system PATH (My Computer > Right button click > Properties > Advanced > Environment Variables > Path) add the destination's bin directory, C:\OpenCV245MinGW\x86\bin
  16. RESTART COMPUTER
  17. Go to the Eclipse CDT IDE, create a C++ program using the sample OpenCV code (You can use code from top of this topic).
  18. Go to Project > Properties > C/C++ Build > Settings > GCC C++ Compiler > Includes, and addthe source OpenCV folder "C:\OpenCV245PC\build\include"
  19. Go to Project > Properties > C/C++ Build > Settings > MinGW C++ Linker > Libraries, and add to the Libraries (-l) ONE BY ONE (this could vary from project to project, you can add all of them if you like or some of them just the ones that you need for your project): opencv_calib3d245 opencv_contrib245 opencv_core245 opencv_features2d245 opencv_flann245 opencv_gpu245 opencv_highgui245 opencv_imgproc245 opencv_legacy245 opencv_ml245 opencv_nonfree245 opencv_objdetect245 opencv_photo245 opencv_stitching245 opencv_video245 opencv_videostab245
  20. Add the built OpenCV library folder, "C:\OpenCV245MinGW\x86\lib" to Library search path (-L).

You can use this code to test your setup:

#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){Mat img = imread("c:/lenna.png", CV_LOAD_IMAGE_COLOR);namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);imshow("MyWindow", img);waitKey(0);return 0;}

Don't forget to put image to the C:/ (or wherever you might find suitable, just be sure that eclipse have read acess.