【问题标题】:setting up OpenCV 2.4.2 with Qt Creator使用 Qt Creator 设置 OpenCV 2.4.2
【发布时间】:2012-08-20 20:22:31
【问题描述】:

我尝试了两种方法来使用 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 tocv::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 文件夹中文件的引用,但我遇到了几乎相同的构建问题。

【问题讨论】:

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


【解决方案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 文件,您会注意到,通过仅指定一个或另一个,向导会自动包含另一个复选框)[例如. ...\opencv\build\x64\vc12\lib\opncv_world310.lib]
  3. 对于“包含文件夹”,导航到构建中的“包含”文件夹。 [例如。 ...\opencv\build\include]
  4. 选择您的操作系统、动态/静态库(无论哪个合适)
  5. 点击下一步,清理并运行!

【讨论】:

    【解决方案2】:

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

    请点击给定的链接。

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

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

    我最近尝试使用 Opencv,这个链接对我开始很有用。

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

    【讨论】:

      【解决方案3】:
      #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...u cn 也执行以下操作..

       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\
      

      你的系统变量命名路径应该有

      1. D:\Opencv2.4.2\opencv\build\x86\vc9\bin(如果你有 Qt 4.8.1 桌面 MSVC2008 (QtSDK) Debug 作为您的目标)
      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)(我添加了这个,因为它显示了一些奇怪的错误......你可以试试)

      编辑路径变量后,关闭 Qt ide/应用程序并重新启动它以反映系统变量更改。

      【讨论】:

      • 作为一个魅力。太感谢了。多么漂亮的帖子。
      【解决方案4】:
      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

      【讨论】:

        【解决方案5】:

        您必须使用 -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
        

        【讨论】:

          猜你喜欢
          • 2013-07-30
          • 2014-07-17
          • 2011-01-14
          • 2017-10-03
          • 1970-01-01
          • 1970-01-01
          • 2020-05-26
          • 2016-11-08
          • 2016-02-11
          相关资源
          最近更新 更多