Galaxy
Galaxy

Reputation: 873

Link OpenCV library with Qt creator on ubuntu

When I tried to link the OpenCV library on Ubuntu, some problems happened which I cannot understand.

I used OpenCV 2.4.11 and Qt creator on Ubuntu 14.04.

In my project file, I wrote

INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += /usr/local/include/opencv2

LIBS += -L/usr/local/lib\
     -lopencv_calib3d\
     -lopencv_contrib\
     -lopencv_core\
     -lopencv_features2d \
     -lopencv_flann\
     -lopencv_gpu\
     -lopencv_highgui\
     -lopencv_imgproc\
     -lopencv_legacy\
     -lopencv_ml\
     -lopencv_nonfree\
     -lopencv_objdetect\
     -lopencv_ocl\
     -lopencv_photo\
     -lopencv_stitching\
     -lopencv_superres\
     -lopencv_ts\
     -lopencv_video\
     -lopencv_videostab

But there were many errors when building the project, such as undefined reference to 'cvCreateMat'. Obviously, the OpenCV wasn't linked to my project properly.

Thus, I searched online and tried a possible solution, and that is

CONFIG += link_pkgconfig
PKGCONFIG += opencv

To my surprise, it works and no linking errors again.

However, I still cannot understand why it didn't work in the first way, since I have successfully set up my project in that way on Mac OS X. Why doesn't it work on my Ubuntu now?


I tried pkg-config --libs opencv, the result was

-L/usr/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -ltbb -lXext -lX11 -lICE -lSM -lGL -lGLU -lrt -lpthread -lm -ldl

Upvotes: 1

Views: 7477

Answers (3)

Belaid Abdelhadi
Belaid Abdelhadi

Reputation: 13

go to your “.pro” file and add the following lines before “SOURCES”:

INCLUDEPATH += /usr/local/include/opencv
LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui

you have to add all the libraries you’re going to need in your project.

Upvotes: 0

Marek R
Marek R

Reputation: 37512

You've missed one library: -lopencv_nonfree

Best way to include openCV in qt projects on Linux is to add to pro file something like:

# add open CV
unix {
    CONFIG += link_pkgconfig
    PKGCONFIG += opencv
}

You will be free of path problems when moving code to another machine.

https://stackoverflow.com/a/17137998/1387438

Upvotes: 7

Luca Carlon
Luca Carlon

Reputation: 9976

This is what pkgconfig links:

luca@luca-virtual-machine:~$ pkg-config --libs 'opencv'
/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab

You can compare with yours. Something may be missing.

Upvotes: 1

Related Questions