1

我是 Qt 和 openCV 的新手,我尝试用代码制作一个简单的项目:

在 .pro 中:

QT       += core

QT       -= gui

QT  += widgets

TARGET = latihan_2
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

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

LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_core246.lib
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_highgui246.lib
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_imgproc246.lib
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_features2d246.lib
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_calib3d246.lib

在 main.cpp 中:

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

int main(){
    //read image
    cv::Mat image;
    image = cv::imread("img.jpg");
    //create image window named "My image"
    cv::namedWindow("My Image");
    //show the image on window
    cv::imshow("My image", image);
    //wait key for 5000ms
    cv::waitKey(5000);
    return 1;

}

但是,它总是给出关于 cv::imread、cv::namedWindows 和我使用的其他 CV 函数的未定义引用的错误。

我使用基于 Qt 5.1.1 的 Qt creator 2.8.1 和 openCV-2.4.6.0

任何帮助将不胜感激!谢谢

4

4 回答 4

2

未定义的引用错误是一个链接问题,这意味着您的项目编译成功,但链接器无法找到这些函数的二进制代码。

我有一个非常简单的 OpenCV/Qt 项目,它被设置为在 Windows/Linux/Mac OS X 上编译。如果你看一下 .pro 文件,你会注意到对于 Windows,我这样做:

win32 {
    message("* Using settings for Windows.")

    INCLUDEPATH += "C:\\opencv\\build\\include" \
                   "C:\\opencv\\build\\include\\opencv" \
                   "C:\\opencv\\build\\include\\opencv2"

    LIBS += -L"C:\\opencv\\build\\x86\\vc10\\lib" \
        -lopencv_core242 \
        -lopencv_highgui242 \
        -lopencv_imgproc242
}

确保将242引用的数字替换为LIBS您拥有的特定 OpenCV 版本。

同样重要的是要说明 OpenCV 是使用特定标志编译的,并且根据您安装的二进制版本,有时您还需要在项目的.pro文件中添加以下说明:

QMAKE_CXXFLAGS_DEBUG += -Zi -MTd
QMAKE_CXXFLAGS_RELEASE += -MT  

MTd多线程调试DLLMT代表多线程静态链接

于 2013-11-16T23:48:39.850 回答
0

当我遇到同样的问题时,谷歌把我带到了这里。这里的解决方案对我没有帮助。但最后我发现了我的问题:我没有为CMAKE_BUILD_TYPEin设置值cmake gui。您可以在 和 之间进行选择releasedebug我认为您必须选择一个。

由于最后的提示,我成功编译了 OpenCV 3.0.0。

于 2015-03-22T17:23:09.250 回答
0

karlphillips 是正确的,您将 opencv 依赖项链接到 Qt 的方式存在错误。您可以手动输入此处其他答案所指示的信息(每次我手动输入时,我都会把它搞砸),或者您可以使用内置的“添加库...”选项(超级简单)。

下面列出的步骤可在 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_world.lib]
  3. 对于“包含文件夹”,导航到构建中的“包含”文件夹。[前任。...\opencv\build\include]
  4. 选择您的操作系统、动态/静态库(以适当者为准)
  5. 点击下一步,清理并运行!
于 2018-08-19T05:35:59.823 回答
-1

您可能不应该使用 ::cv,直接使用该函数并尝试。

对不起,错误的建议,真正的原因是找不到你的库:

应该使用这个:LIBS +=E:\\OpenCV\\OpenCV\\opencv\\build\\x86\\vc10\\lib\\opencv_core246.lib

于 2013-11-15T11:09:55.697 回答