Monday, 21 March 2011

Installtion guide for Opencv in Linux using the Synaptic Manager

This article is basically for installing Opencv 2.1 in Ubuntu 10.10. Opencv basically helps in image processing using c++ . For reading or writing images in c++ , we require Opencv. The steps below are the ways Opencv can be installed.

1. Go to Synaptic Package Manager (System> Administration> Synaptic Package Manager).

2. Search for “opencv” and install the main “opencv” package and the following lib files:
libcv
libcv-dev
libcvaux
libcvaux-dev
libhighgui
libhighgui-dev
opencv-doc
(‘python-opencv’ not required).
(you can also install opencv directly from the terminal by “sudo apt-get install” the above lib files



3. After installing all the packages, type this code:


$ export LD_LIBRARY_PATH=/home/opencv/lib     
$ export PKG_CONFIG_PATH=/home/opencv/lib/pkgconfig


The above ones are default paths for the opencv libraries.

4. To check the path where opencv & other lib files are stored, do:


    $ pkg-config --cflags opencv


This output shows the path of the header file as:

-I/usr/include/opencv


   $ pkg-config --libs opencv

This output shows the libraries required to be included.

-lcxcore -lcv -lhighgui -lcvaux -lml


An Example code:


This code reads an image an displays it.It is named as img.cc


#include <stdlib.h>
#include <iostream>
#include <math.h>
#include </usr/include/opencv/cv.h>
#include </usr/include/opencv/highgui.h>
using namespace std;

int main(int argc, char *argv[])
{
  IplImage* img = 0;
  IplImage* img1=cvCreateImage(cvSize(256,256),IPL_DEPTH_8U,1);
  int height,width,step,channels;
  unsigned char *data;
  int i,j,k;
  if(argc<2){
    cout<<"Usage: main <image-file-name>";
    exit(0);
  }
 // load an image
img=cvLoadImage(argv[1],-1);    //-1 is a flag (flag<0 the loaded image is loaded as is (with number of channels in the file)
if(!img){
    cout<<"Could not load image file:"<<argv[1]<<endl;
    exit(0);
}
// get the image data
  height    = img->height;
  width     = img->width;
  step      = img->widthStep;
  channels  = img->nChannels;
  data      = (unsigned char *)img->imageData;
  cout<<"Height - "<<height<<endl;
  cout<<"Width - "<<width<<endl;
  cout<<"WidthStep - "<<step<<endl;
  cout<<"Channels - "<<channels<<endl;
  cout<<endl;
 cvNamedWindow("Read Image", CV_WINDOW_AUTOSIZE);
  // creating the image
  for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
    data[i*step+j*channels+k]=data[i*step+j*channels+k];
  img1->imageData=(char*)data;
  // show the image
  cvShowImage("Read Image", img1 );
  // wait for a key
  cvWaitKey(0);
// release the image
  cvReleaseImage(&img );
  return 0;
}


These paths are needed to compile your opencv programs as shown below:

5. To compile & run:


    $ g++ -I/usr/include/opencv -lcxcore -lhighgui -lm img.cc



    where img.cc is c++ code for reading an image and displaying it.

 
   $ ./a.out lena.bmp

  

6. For simplyfying the above command create an alias of the command in the home directory as

$ alias ocv="g++ -I/usr/include/opencv -lcv -lcxcore -lcvaux -lhighgui -lm"

$ ocv img.cc

$./a.out lena.bmp



Following steps 5 and 6 we get the output as shown below.

Reading an image in C++ using Opencv







  

  






No comments:

Post a Comment