0

I am using ubuntu 13.10 and I am trying to install opencv on eclipse. I am following this tutorial LINK

I do not know where is my library. This what I obtain when I try to find the files.

       donbeo@donbeo-HP-EliteBook-Folio-9470m:~$ pkg-config --libs opencv
        -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann 
    -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml 
-lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab  
        donbeo@donbeo-HP-EliteBook-Folio-9470m:~$ 

It does not report the file path. I have tried different paths but I receiving always compiling error

22:26:06 **** Incremental Build of configuration Debug for project machine_learning ****
make all 
Building target: machine_learning
Invoking: Cross G++ Linker
g++ -L/usr/local/lib -o "machine_learning"  ./src/prova.o   -lopencv_core  -lopencv_calib3d  -lopencv_objdetect  -lopencv_contrib  -lopencv_legacy  -lopencv_flann -lopencv_imgproc  -lopencv_highgui  -lopencv_ml  -lopencv_video -l\ opencv_features2d
/usr/bin/ld: cannot find -l opencv_features2d
collect2: error: ld returned 1 exit status
make: *** [machine_learning] Error 1

22:26:06 Build Finished (took 114ms)

The error could be in the lib path. How can I solve this?

EDIT:

I had various problems after the installation. In particular after reboot and login I obtained a black screen.

As expressed in this post Error Ubuntu 13.10 blackscreen

I have been able to restore my system using the information in this blog

http://www.anickle.com/2014/01/19/ubuntu-13-10-intel-graphics-killed-by-opencv/

Now seems that it is partially working.

I am able to run this example code:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>

using namespace cv;

int main()
{
    // Data for visual representation
    int width = 512, height = 512;
    Mat image = Mat::zeros(height, width, CV_8UC3);

    // Set up training data
    float labels[4] = {1.0, -1.0, -1.0, -1.0};
    Mat labelsMat(4, 1, CV_32FC1, labels);

    float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
    Mat trainingDataMat(4, 2, CV_32FC1, trainingData);

    // Set up SVM's parameters
    CvSVMParams params;
    params.svm_type    = CvSVM::C_SVC;
    params.kernel_type = CvSVM::LINEAR;
    params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);

    // Train the SVM
    CvSVM SVM;
    SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);

    Vec3b green(0,255,0), blue (255,0,0);
    // Show the decision regions given by the SVM
    for (int i = 0; i < image.rows; ++i)
        for (int j = 0; j < image.cols; ++j)
        {
            Mat sampleMat = (Mat_<float>(1,2) << j,i);
            float response = SVM.predict(sampleMat);

            if (response == 1)
                image.at<Vec3b>(i,j)  = green;
            else if (response == -1)
                 image.at<Vec3b>(i,j)  = blue;
        }

    // Show the training data
    int thickness = -1;
    int lineType = 8;
    circle( image, Point(501,  10), 5, Scalar(  0,   0,   0), thickness, lineType);
    circle( image, Point(255,  10), 5, Scalar(255, 255, 255), thickness, lineType);
    circle( image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
    circle( image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);

    // Show support vectors
    thickness = 2;
    lineType  = 8;
    int c     = SVM.get_support_vector_count();

    for (int i = 0; i < c; ++i)
    {
        const float* v = SVM.get_support_vector(i);
        circle( image,  Point( (int) v[0], (int) v[1]),   6,  Scalar(128, 128, 128), thickness, lineType);
    }

    imwrite("result.png", image);        // save the image

    imshow("SVM Simple Example", image); // show it to the user
    waitKey(0);

}

But I receive and error when I try to run

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main( int argc, char** argv )
{
  Mat image;
  image = imread( argv[1], 1 );

  if( argc != 2 || !image.data )
    {
      printf( "No image data \n" );
      return -1;
    }

  namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
  imshow( "Display Image", image );

  waitKey(0);

  return 0;
}

Invoking: Cross G++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/prova.d" -MT"src/prova.d" -o "src/prova.o" "../src/prova.cpp"
../src/prova.cpp:1:16: fatal error: cv.h: No such file or directory
 #include <cv.h>
Donbeo
  • 501
  • 1
  • 8
  • 27

1 Answers1

0

Since all the preceding libraries in the same command appear to have been located successfully, I don't think there is a problem with the library path - more likely your issue is that your command line has an out-of-place backslash in it

... -lopencv_video -l\ opencv_features2d ...

It should work if you change that to

... -lopencv_video -lopencv_features2d ...


It should also work with a space after the -l

... -lopencv_video -l opencv_features2d ...

although the man page does not recommend it:

   -llibrary
   -l library
       Search the library named library when linking.  (The second
       alternative with the library as a separate argument is only for
       POSIX compliance and is not recommended.)


AFAIK the backslash is only legal in this context as a line-continuation character i.e.

... -lopencv_video -l\
opencv_features2d ...

(with a newline) would also work I think, although it would be more natural to break before the -l in my opinion.

steeldriver
  • 136,215
  • 21
  • 243
  • 336