Home | History | Annotate | Download | only in linux_eclipse
      1 Using OpenCV with Eclipse (plugin CDT) {#tutorial_linux_eclipse}
      2 ======================================
      3 
      4 Prerequisites
      5 -------------
      6 Two ways, one by forming a project directly, and another by CMake Prerequisites
      7 -#  Having installed [Eclipse](http://www.eclipse.org/) in your workstation (only the CDT plugin for
      8     C/C++ is needed). You can follow the following steps:
      9     -   Go to the Eclipse site
     10     -   Download [Eclipse IDE for C/C++
     11         Developers](http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliossr2) .
     12         Choose the link according to your workstation.
     13 -#  Having installed OpenCV. If not yet, go @ref tutorial_linux_install "here".
     14 
     15 Making a project
     16 ----------------
     17 
     18 -#  Start Eclipse. Just run the executable that comes in the folder.
     19 -#  Go to **File -\> New -\> C/C++ Project**
     20 
     21     ![](images/a0.png)
     22 
     23 -#  Choose a name for your project (i.e. DisplayImage). An **Empty Project** should be okay for this
     24     example.
     25 
     26     ![](images/a1.png)
     27 
     28 -#  Leave everything else by default. Press **Finish**.
     29 -#  Your project (in this case DisplayImage) should appear in the **Project Navigator** (usually at
     30     the left side of your window).
     31 
     32     ![](images/a3.png)
     33 
     34 -#  Now, let's add a source file using OpenCV:
     35     -   Right click on **DisplayImage** (in the Navigator). **New -\> Folder** .
     36 
     37         ![](images/a4.png)
     38 
     39     -   Name your folder **src** and then hit **Finish**
     40     -   Right click on your newly created **src** folder. Choose **New source file**:
     41     -   Call it **DisplayImage.cpp**. Hit **Finish**
     42 
     43         ![](images/a7.png)
     44 
     45 -#  So, now you have a project with a empty .cpp file. Let's fill it with some sample code (in other
     46     words, copy and paste the snippet below):
     47     @code{.cpp}
     48     #include <opencv2/opencv.hpp>
     49 
     50     using namespace cv;
     51 
     52     int main( int argc, char** argv )
     53     {
     54       Mat image;
     55       image = imread( argv[1], 1 );
     56 
     57       if( argc != 2 || !image.data )
     58         {
     59           printf( "No image data \n" );
     60           return -1;
     61         }
     62 
     63       namedWindow( "Display Image", WINDOW_AUTOSIZE );
     64       imshow( "Display Image", image );
     65 
     66       waitKey(0);
     67 
     68       return 0;
     69     }
     70     @endcode
     71 -#  We are only missing one final step: To tell OpenCV where the OpenCV headers and libraries are.
     72     For this, do the following:
     73 
     74     -   Go to **Project--\>Properties**
     75     -   In **C/C++ Build**, click on **Settings**. At the right, choose the **Tool Settings** Tab.
     76         Here we will enter the headers and libraries info:
     77         -#  In **GCC C++ Compiler**, go to **Includes**. In **Include paths(-l)** you should
     78             include the path of the folder where opencv was installed. In our example, this is
     79             /usr/local/include/opencv.
     80 
     81             ![](images/a9.png)
     82 
     83             @note If you do not know where your opencv files are, open the **Terminal** and type:
     84             @code{.bash}
     85             pkg-config --cflags opencv
     86             @endcode
     87             For instance, that command gave me this output:
     88             @code{.bash}
     89             -I/usr/local/include/opencv -I/usr/local/include
     90             @endcode
     91 
     92         -#  Now go to **GCC C++ Linker**,there you have to fill two spaces:
     93 
     94             First in **Library search path (-L)** you have to write the path to where the opencv libraries
     95             reside, in my case the path is: :
     96 
     97                 /usr/local/lib
     98 
     99             Then in **Libraries(-l)** add the OpenCV libraries that you may need. Usually just the 3 first
    100             on the list below are enough (for simple applications) . In my case, I am putting all of them
    101             since I plan to use the whole bunch:
    102 
    103             opencv_core opencv_imgproc opencv_highgui opencv_ml opencv_video opencv_features2d
    104             opencv_calib3d opencv_objdetect opencv_contrib opencv_legacy opencv_flann
    105 
    106             ![](images/a10.png)
    107 
    108             If you don't know where your libraries are (or you are just psychotic and want to make sure
    109             the path is fine), type in **Terminal**:
    110             @code{.bash}
    111             pkg-config --libs opencv
    112             @endcode
    113             My output (in case you want to check) was:
    114             @code{.bash}
    115             -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann
    116             @endcode
    117             Now you are done. Click **OK**
    118 
    119 -   Your project should be ready to be built. For this, go to **Project-\>Build all**
    120 
    121     In the Console you should get something like
    122 
    123     ![](images/a12.png)
    124 
    125     If you check in your folder, there should be an executable there.
    126 
    127 Running the executable
    128 ----------------------
    129 
    130 So, now we have an executable ready to run. If we were to use the Terminal, we would probably do
    131 something like:
    132 @code{.bash}
    133 cd <DisplayImage_directory>
    134 cd src
    135 ./DisplayImage ../images/HappyLittleFish.png
    136 @endcode
    137 Assuming that the image to use as the argument would be located in
    138 \<DisplayImage_directory\>/images/HappyLittleFish.png. We can still do this, but let's do it from
    139 Eclipse:
    140 
    141 -#  Go to **Run-\>Run Configurations**
    142 -#  Under C/C++ Application you will see the name of your executable + Debug (if not, click over
    143     C/C++ Application a couple of times). Select the name (in this case **DisplayImage Debug**).
    144 -#  Now, in the right side of the window, choose the **Arguments** Tab. Write the path of the image
    145     file we want to open (path relative to the workspace/DisplayImage folder). Let's use
    146     **HappyLittleFish.png**:
    147 
    148     ![](images/a14.png)
    149 
    150 -#  Click on the **Apply** button and then in Run. An OpenCV window should pop up with the fish
    151     image (or whatever you used).
    152 
    153     ![](images/a15.jpg)
    154 
    155 -#  Congratulations! You are ready to have fun with OpenCV using Eclipse.
    156 
    157 ### V2: Using CMake+OpenCV with Eclipse (plugin CDT)
    158 
    159 Say you have or create a new file, *helloworld.cpp* in a directory called *foo*:
    160 @code{.cpp}
    161 #include <opencv2/opencv.hpp>
    162 using namespace cv;
    163 
    164 int main ( int argc, char **argv )
    165 {
    166   Mat img(480, 640, CV_8U);
    167   putText(img, "Hello World!", Point( 200, 400 ), FONT_HERSHEY_SIMPLEX | FONT_ITALIC, 1.0, Scalar( 255, 255, 0 ));
    168   imshow("My Window", img);
    169   waitKey();
    170   return 0;
    171 }
    172 @endcode
    173 -#  Create a build directory, say, under *foo*: mkdir /build. Then cd build.
    174 -#  Put a `CmakeLists.txt` file in build:
    175 @code{.bash}
    176 PROJECT( helloworld_proj )
    177 FIND_PACKAGE( OpenCV REQUIRED )
    178 ADD_EXECUTABLE( helloworld helloworld.cxx )
    179 TARGET_LINK_LIBRARIES( helloworld \f${OpenCV_LIBS} )
    180 @endcode
    181 -#  Run: cmake-gui .. and make sure you fill in where opencv was built.
    182 -#  Then click configure and then generate. If it's OK, **quit cmake-gui**
    183 -#  Run `make -j4` (the -j4 is optional, it just tells the compiler to build in 4 threads). Make
    184     sure it builds.
    185 -#  Start eclipse. Put the workspace in some directory but **not** in foo or `foo\build`
    186 -#  Right click in the Project Explorer section. Select Import And then open the C/C++ filter.
    187     Choose *Existing Code* as a Makefile Project.
    188 -#  Name your project, say *helloworld*. Browse to the Existing Code location `foo\build` (where
    189     you ran your cmake-gui from). Select *Linux GCC* in the *"Toolchain for Indexer Settings"* and
    190     press *Finish*.
    191 -#  Right click in the Project Explorer section. Select Properties. Under C/C++ Build, set the
    192     *build directory:* from something like `${workspace_loc:/helloworld}` to
    193     `${workspace_loc:/helloworld}/build` since that's where you are building to.
    194 
    195     -#  You can also optionally modify the Build command: from make to something like
    196         `make VERBOSE=1 -j4` which tells the compiler to produce detailed symbol files for debugging and
    197         also to compile in 4 parallel threads.
    198 
    199 -#  Done!
    200