使用Qt Creator设置OpenCV 2.4.2

时间:2012-08-25 15:59:07

标签: visual-studio-2010 qt opencv qt-creator

我尝试了两种方法来使用opencv和qt creator 第一个使用Mingw,其中dll和.dll.a文件已经下载了opencv库,我只是在.pro文件中添加对.dll.a文件的引用,如下所示

INCLUDEPATH += D:\\OpenCV\\opencv\\build\\include
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_calib3d242.dll.a
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_contrib242.dll.a
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_core242.dll.a
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_features2d242.dll.a

我有一个简单的代码来测试opencv:

#include <QtCore/QCoreApplication>
#include <opencv/cv.h>

using namespace cv;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Mat image;

    return a.exec();
}

但是我遇到了构建问题,如下所示

  

C:\ Users \ Kato \ Documents \ QT projects \ QtOpenCVYaRab \ debug \ main.o:-1:在函数~Mat': d:\OpenCV\opencv\build\include\opencv2\core\mat.hpp:278: error: undefined reference to cv :: fastFree(void *)'   d:\ OpenCV \ opencv \ build \ include \ opencv2 \ core \ mat.hpp:367:错误:未定义引用`cv :: Mat :: deallocate()'   :-1:错误:collect2:ld返回1退出状态

以下是一些编译输出:

Running build steps for project QtOpenCVYaRab...
Configuration unchanged, skipping qmake step.
Starting: "C:\QtSDK\mingw\bin\mingw32-make.exe" 
C:/QtSDK/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `C:/Users/Kato/Documents/QT projects/QtOpenCVYaRab'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL

 d:/OpenCV/opencv/build/include/opencv2/core/mat.hpp:278: undefined reference to `cv::fastFree(void*)'
debug/main.o:d:/OpenCV/opencv/build/include/opencv2/core/mat.hpp:367: undefined reference to `cv::Mat::deallocate()'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\QtOpenCVYaRab.exe] Error 1
mingw32-make: *** [debug] Error 2
The process "C:\QtSDK\mingw\bin\mingw32-make.exe" exited with code 2.
Error while building project QtOpenCVYaRab (target: Desktop)
When executing build step 'Make'

第二种方法是使用cmake来编译opencv库,使用visual studio 2010构建它并添加对bin文件夹中文件的引用,但我得到了几乎相同的构建问题。

5 个答案:

答案 0 :(得分:5)

#include "iostream"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main()
{
    IplImage *image = cvLoadImage("C:\\lena.jpg");
    Mat im(image);
    imshow("TEST",im);
    waitKey();
    return 0;
}

这是你的main.cpp ...上面的程序显示了lena的图片...使用双反斜杠来指示windows平台上的目录更改...一些imread如何为我工作所以我已经加载了将图像作为IplImage并将其转换为Mat ...您也可以执行以下操作..

 IplImage *image = cvLoadImage("C:\\lena.jpg",1);
 cvShowImage("TEST",image);
 cvWaitKey();

你的.pro文件应该有前面提到的以下几行......

INCLUDEPATH += D:\OpenCV\opencv\build\include

LIBS +=-LD:\OpenCV\opencv\build\x64\mingw\lib\
-lopencv_core242\
-lopencv_highgui242\
-lopencv_imgproc242\
-lopencv_video242\

并且名为path的系统变量应该

  1. D:\ Opencv2.4.2 \ opencv \ build \ x86 \ vc9 \ bin(如果你有Qt 4.8.1 for 桌面MSVC2008(QtSDK)调试作为目标)
  2. D:\ Opencv2.4.2 \ opencv \ build \ x86 \ mingw \ bin(如果您的目标基于Qt MinGW x86)
  3. D:\ OpenCV2.4.2 \ opencv \ build \ common \ tbb \ ia32 \ vc9(mingw)(我添加了这个因为它显示了一些奇怪的错误......你可以尝试一下)
  4. 编辑路径变量后关闭Qt ide / application并重新启动它以使系统变量更改以反映..

答案 1 :(得分:1)

INCLUDEPATH += D:\OpenCV\opencv\build\include

LIBS +=-LC:\OpenCV\opencv\build\x64\mingw\lib\
-lopencv_core242\
-lopencv_highgui242\
-lopencv_imgproc242\
-lopencv_video242\


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

using namespace cv;

int main()
{
}

如果您将其作为控制台应用程序运行,则无需包含QtCore / QtApplication

答案 2 :(得分:0)

您必须使用-L指定库路径,然后使用

添加库文件
-l<libname_without_extension>

对于unix(安装在默认位置):

unix: LIBS += -lopencv_core
unix: LIBS += -lopencv_highgui

对于Windows(你的问题):

win32: LIBS += -L C:\OpenCV2.3\opencv\build\gpu\x64\lib\ -lopencv_core231

答案 3 :(得分:0)

从提到的错误来看,似乎Opencv库缺少一些文件/组件。请从Opencv的简单程序开始。该程序只显示摄像机图像。

请按照指定的链接。

http://linux.softpedia.com/get/Multimedia/Graphics/qwebcam-38246.shtml

下载qwebcam的源代码并按照说明设置Opencv。这是一个非常简单的源代码,工作正常(在Linux-os上测试)。

我最近尝试过Opencv&amp;这个链接对我来说非常有用。

希望您能够通过此代码解决错误。

答案 4 :(得分:-1)

我遇到了同样的问题,但是手动更改.pro对我不起作用。最终,我找到了将openCV连接到Qt的简单解决方案。我为此发布了其他一些主题,https://stackoverflow.com/a/51914928/10245006,并提供了以下信息。

以下列出的步骤在Qt5文档中找到:[http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html][1]在“添加库”部分下。

  1. 右键单击创建者左侧“项目窗格”中的项目文件...,然后选择“添加库...”
  2. 按照向导的说明

让我从这里添加一些特异性...

  1. 选择“外部库”
  2. 对于“库文件”,浏览至opencv_worldXXX.lib文件(或opencv_worldXXXd.lib文件,您会注意到,仅指定一个或另一个向导会具有一个自动包含另一个复选框的复选框) [ex 。 ... \ opencv \ build \ x64 \ vc12 \ lib \ opncv_world310.lib]
  3. 对于“包含文件夹”,导航到构建中的“包含”文件夹。 [例如... \ opencv \ build \ include]
  4. 选择您的操作系统,动态/静态库(以适当的为准)
  5. 点击下一步,清理并运行!