Sunday, October 2, 2011

Computer Vision: Getting started with OpenCV


OpenCV (Open Source Computer Vision) is a library of APIs aimed at enabling real time computer vision. OpenCV had Intel as the champion during its early developmental stages from 1999 to its first formal release in 2006. This post looks at the steps involved in installing OpenCV on your Linux machine and getting started with some simple programs. For the steps for installing OpenCV in Windows look at my post "Installing and using OpenCV with Visual Studio 2010 express"

As a first step download the tarball OpenCV-2.3.1a.tar.bz2 from the link below to directory
$HOME/opencv
http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.3.1/

Unzip and and untar the bzipped file using

$ tar jxvf OpenCV-2.3.1a.tar.bz2
Now
$ cd OpenCV-2.3.1

You have to run cmake to configure the directories before running make. I personally found it
easier to run the cmake wizard using
$ cmake -i

Follow through all the prompts that the cmake wizard gives and make appropriate choices.

Once this complete

Run
$ make

Login as root

$ su – root
password: *******

Run
$ make install

This should install all the appropriate files and libraries in /usr/local/lib

Now assuming that everything is fine you should be good to go.

Start Eclipse, open a new C project.

Under Project->Properties->Settings->GCC Compiler ->Directories include the following 2 include paths

../opencv/OpenCV-2.3.1/include/opencv
../opencv/OpenCV-2.3.1/include/opencv2

Under
Project->Properties->Settings->GCC Linker ->Libraries in the library search path
include /usr/local/lib

Under libraries include the following
opencv_highgui , opencv_core , opencv_imgproc , opencv_highgui , opencv_ml , opencv_video, opencv_features2d , opencv_calib3d , opencv_objdetect , opencv_contrib , opencv_legacy , opencv_flann

(To get the list of libraries you could also run the following command)
pkg-config --libs /usr/local/lib/pkgconfig/opencv.pc
-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

Now you are ready to create your first OpenCV program

The one below will convert an image to test.png
#include "highgui.h"

int main( int argc, char** argv ) {
IplImage* img = cvLoadImage( argv[1],1);

cvSaveImage( "test.png", img, 0);
cvReleaseImage( &img );
return 0;
}

If you get a runtime error cannot find shared library
“ibopencv_core.so.2.3: cannot open shared object file: No such file or directory”
then you need to ensure that the linker knows the paths of the libraries.

The commands are as follows

$vi /etc/ld.so.conf.d/opencv.conf
Enter
/usr/local/lib
and save file

Now execute
$ldconfig /etc/ld.so.conf

You can check if everything is fine by running
$[root@localhost mycode]# ldconfig -v | grep open
ldconfig: /etc/ld.so.conf.d/kernel-2.6.32.26-175.fc12.i686.PAE.conf:6: duplicate hwcap 0 nosegneg
libopencv_gpu.so.2.3 -> libopencv_gpu.so.2.3.1
libopencv_ml.so.2.3 -> libopencv_ml.so.2.3.1
libopencv_legacy.so.2.3 -> libopencv_legacy.so.2.3.1
libopencv_objdetect.so.2.3 -> libopencv_objdetect.so.2.3.1
libopencv_video.so.2.3 -> libopencv_video.so.2.3.1
.....

Now re-build the code and everything should be fine.

Here's a second program to run various transformations to an image
IplImage* img = cvLoadImage( argv[1],1);
// create a window. Window name is determined by a supplied argument
cvNamedWindow( argv[1], CV_WINDOW_AUTOSIZE );
// Apply Gaussian smooth
//cvSmooth( img, img, CV_GAUSSIAN, 9, 9, 0, 0 );

cvErode (img,img,NULL,2);
// Display an image inside and window.
cvShowImage( argv[1], img );
//Save image
cvSaveImage( "/home/ganesh/Desktop/baby2.png", img, 0);

....



There are many samples also downloaded along with the installation. You can try them out. I found the facedetect.cpp sample interesting. It is based on Haar cacades and works really well. Compile facedetect.cpp under samples/c

Check it out. Including facedetect.cpp detecting my face in real time ...



Have fun with OpenCV.

Get going! Get hooked!

INWARDi Technologies

No comments:

Post a Comment