简体   繁体   English

将 OpenCV 库与 ubuntu 上的 Qt 创建者链接起来

[英]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.当我尝试在 Ubuntu 上链接 OpenCV 库时,发生了一些我无法理解的问题。

I used OpenCV 2.4.11 and Qt creator on Ubuntu 14.04.我在 Ubuntu 14.04 上使用了 OpenCV 2.4.11 和 Qt creator。

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' .但是在构建项目的时候出现了很多错误,比如undefined reference to 'cvCreateMat' Obviously, the OpenCV wasn't linked to my project properly.显然,OpenCV 没有正确链接到我的项目。

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?但是,我仍然无法理解为什么它不能以第一种方式工作,因为我已经在 Mac OS X 上以这种方式成功设置了我的项目。为什么它现在不能在我的 Ubuntu 上工作?


I tried pkg-config --libs opencv , the result was我试过pkg-config --libs opencv ,结果是

-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

You've missed one library: -lopencv_nonfree 您已经错过了一个图书馆: -lopencv_nonfree

Best way to include openCV in qt projects on Linux is to add to pro file something like: 在Linux上的qt项目中包括openCV的最佳方法是在pro文件中添加以下内容:

# 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 https://stackoverflow.com/a/17137998/1387438

This is what pkgconfig links: 这是pkgconfig链接的内容:

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. 可能缺少某些东西。

go to your “.pro” file and add the following lines before “SOURCES”:转到您的“.pro”文件并在“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.你必须在你的项目中添加你需要的所有库。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM