使用Qt Creator设置OpenCV 2.4.2

4

我尝试了两种方法使用qt creator和opencv。第一种方法是使用Mingw,此时opencv库已经下载好了dlls和.dll.a文件,我只需要在.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: 错误:对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文件夹中的文件中,但我遇到了几乎相同的构建问题。

请查看(OpenCV与其他GUI)[https://dev59.com/a3E95IYBdhLWcg3wrPwn#2212909]。 - masad
5个回答

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 desktop 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/应用程序并重启以反映系统变量更改。


非常顺利地工作了。非常感谢你。多么美好的帖子。 - CroCo

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。

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

0
从所提到的错误来看,似乎缺少了一些Opencv库的文件/组件。请从一个简单的Opencv程序开始。这个程序只是显示摄像头图像。
请按照给定的链接进行操作。

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

下载qwebcam的源代码并按照说明设置Opencv。这是一个非常简单的源代码,可以正常工作(在Linux操作系统上进行了测试)。

我最近尝试使用Opencv,这个链接对我来说非常有用。

希望您能通过这段代码解决您的错误。


-1

我也遇到了同样的问题,但手动更改 .pro 文件对我没有用。最终,我找到了一个简单的解决方案来连接 openCV 到 Qt。我在其他几个线程中发布了相关信息,https://dev59.com/8GUo5IYBdhLWcg3wpgsf#51914928 并在下面包含了这些信息。

以下步骤可以在 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. 对于 "Include 文件夹",请在 build 中导航到 "include" 文件夹。[例如 ...\opencv\build\include]
  4. 选择操作系统、动态/静态库(适用的那个)
  5. 单击下一步、清理和运行!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接