VisualC 2010中的openCV 2.2 createButton LNK 2019错误

lig*_*ist 3 opencv visual-studio-2010

我一直在尝试使用openCV 2.2的新Qt函数(参见http://opencv.willowgarage.com/documentation/cpp/qt_new_functions.html#index-1384)进行项目,但我一直收到错误:

1> main.cpp 1> main.obj:错误LNK2019:未解析的外部符号"void __cdecl cv :: displayStatusBar(class std :: basic_string,class std :: allocator> const&,class std :: basic_string,class std :: allocator> const&,int)"(?displayStatusBar @ cv @@ YAXABV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ 0H @ Z)在函数中引用_main 1> C:\ Documents and Settings\Orange\my documents\visual studio 2010\Projects\FYP\FYP.exe:致命错误LNK1120:1未解析的外部

我正在使用Visual Studio 2010,windows xp,qt 4.7.1和openCV 2.2.
我已经在属性>链接器>输入下的项目设置中为openCV和qt添加了核心lib文件.我尝试编译并运行openCV代码时没有遇到任何问题,除非我尝试使用新的Qt函数,如displayStatusBar(...)和createButton(...).我一直在寻找一个解决方案,我现在仍然找不到一个,因为openCV2.2最近刚刚发布.有没有人尝试过并遇到过这个问题并有解决方案?

顺便说一下,我想使用openCV提供的函数来创建简单的窗口和按钮而不是qt是因为我希望避免在openCV中的Mat数据类型和Qt中的QImage之间进行转换.

在此先感谢任何回复.

附加代码:

#include <cv.h>
#include <highgui.h>

using namespace cv;

int main()
{
    namedWindow("Test", CV_WINDOW_AUTOSIZE);            
    // ...
    // Code links without problem when the following line is commented out.
    displayStatusBar("Test", "Hello World", 5000);  

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

lig*_*ist 8

我发现了问题所以我想我应该在这里发布一个答案,以便其他可能遇到同样问题的人受益.

基本上,默认情况下为OpenCv 2.2提供的二进制文件不包括Qt新函数.要启用它,需要下载OpenCV的来源和使用CMake的生成makefile和来源,包括Qt的新功能和编译从头源.

以下是大致要做的步骤:

  1. 首先,使用SDK从这里安装QT:http: //qt.nokia.com/downloads/.注意:您需要将QT库和头文件添加到系统路径和链接器路径中,以便编译器可以找到它们.它不仅仅是下载和安装.对于Windows,请参阅:http://developer.qt.nokia.com/doc/qt-4.8/install-win.html以了解如何添加环境变量.您需要将它们设置为CMake以检测QT并生成正确的文件.对于Linux用户,请参阅:http://blog.sudobits.com/2010/06/30/how-to-install-qt-on-ubuntu-10-04/
  2. 从这里下载并安装CMake:http: //cmake.org/cmake/resources/software.html.
  3. 从这里下载OpenCV的操作系统源代码:http: //opencv.willowgarage.com/wiki/
  4. 现在运行CMake的GUI并使用它来选择已提取OpenCV源的文件夹.选择要编译的OS类型,即Unix Makefile,Visual Studio解决方案,XCode等.
  5. 现在应该出现一个选项列表.QT和QT都可以选择openGL.如果需要,请选择第一个和使用openGL的一个.接下来,单击"配置"按钮,然后单击CMake中的"生成"按钮.然后将生成必要的项目文件.
  6. 根据您创建的项目类型(Unix Makefiles,Visual Studio项目等),您现在可以转到CMake生成它们的文件夹并编译项目.例如,如果您选择CMake生成Visual Studio解决方案,则文件夹中将存在Visual Studio解决方案文件.打开它,然后选择Build All.如果您选择Unix Makefile,只需在命令行中调用"make",然后调用"sudo make install".
  7. 现在您只需要/ lib文件夹中的库和/ include文件夹中的头文件.将这2个文件夹复制到您希望放置它们的位置.例如,在Ubuntu上,键入"sudo make install"后,它们将自动复制到/ usr/local/lib和/ usr/local/include.对于Windows用户,它们将位于您在CMake中指定的文件夹中.
  8. 要链接您的项目(无论是Visual Studio还是使用make in unix),您必须告诉链接器在哪里可以找到libs和包含文件.您可以像下载OpenCV二进制文件时那样指定它们.

而已.你现在应该有一个使用QT的OpenCV.

有关如何从头开始编译的说明,请参见OpenCv的网页:http://opencv.willowgarage.com/wiki/InstallGuide .