2

我想用 Qt 创建一个 gui 应用程序,在 Windows XP 上使用 opencv。我以前使用过 Qt 和 opencv,但从来没有一起使用过。长话短说,我无法让 opencv 与 Qt 一起工作。

在我搜索的所有论坛上,只有少量信息散布在各处,通常没有答案,我在这里总结了我所采取的所有步骤。

  1. 下载了Windows的Qt SDK(4.6.3),用了一段时间,成功。
  2. 下载了适用于 Windows 的 opencv 2.3.1 megapack,包含二进制文件。我成功地编译了包括 opencv 在内的 Qt 项目,但是任何 opencv 函数调用都会导致崩溃。我在一些论坛上读到 Windows megapack 中的二进制文件不支持 Qt,我必须自己构建 opencv
  3. 我下载了最新版本的 CMake (2.8)。
  4. 我从这里下载了opencv的源代码:http: //code.opencv.org/svn/opencv/branches/2.3/
  5. 我下载了我拥有的 Qt 版本的源代码(4.6.3)
  6. 我找到了旧版本的 Visual Studio 2005
  7. 我用 CMake 创建了一个 VS2005 项目,检查了对 Qt 的支持。(WITH_QT选中)
  8. 我在VS2005中构建了opencv。它创建了大多数库,但不是全部。Highgui是失败者之一。问题:Qt\4.6.3\src\corelib\global\qconfig.h没有找到。qconfig.h我下载的源中根本没有!我找到了一些模板qconfig-large.hqconfig-small.h,所以我将其中一个重命名为qconfig.h. 现在我得到了一个充满链接器错误的屏幕。
  9. 我下载了最新的 Qt 源代码(4.8.1)。现在有一个qbenchmark.h包含QtTest/qbenchmarkmetric.h找不到的源文件。
  10. 我放弃了,尝试了 MinGW。
  11. 我下载了最新的MinGW(2011.11.18)
  12. 我将 CMake 设置为生成 MinGW makefile,但出现以下错误:

.

CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-g++.cmake:1 (INCLUDE):
  include could not find load file:
C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-gcc.cmake
Call Stack (most recent call first):
C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeCXXInformation.cmake:59 (INCLUDE)

没错,Modules/Platform 目录中有一个Windows-g++.cmake文件,但它引用Windows-gcc.cmake了不存在的文件!

有没有人设法在 Windows 上构建带有 Qt 支持的 opencv,如果是,如何?

编辑

问题肯定出在 Qt 源代码上。我设法生成了一个 MinGW makefile,并且构建一切正常,直到它停止,src/testlib/qtestsystem.h因为有一个包含QtCore/qelapsedtimer.h文件位于完全不同的目录中!Qt 是否发布了不完整的源代码,还是我做错了什么?

编辑2

我的折磨还在继续。我清理了所有东西并重新开始。这次甚至没有尝试 Visual Studio。

  1. 我下载了带有源代码的最新 Qt 库(4.8.1)
  2. 我下载了最新的MinGW(2011.11.18)
  3. 使用 CMake,我成功创建了一个 Makefile,并使用 MinGW 构建了它。我有一些闪亮的新库(libopencv_core231,等)。我很高兴,但是我这么快就庆祝是多么错误啊!!
  4. 我下载了最新的Qt SDK(奇怪的是4.8.0,所以我设置Qt Creator使用4.8.1)并创建了一个没有opencv的测试程序,看看它是否有效。有效!
  5. 我尝试使用opencv,只是读取和显示图像。它没有用。exited with code -1073741511
  6. 我尝试在.exeQt Creator 之外直接运行。它抱怨失踪libstdc++-6.dll
  7. 我搜索了它,在我的 MinGW 安装中找到(c:\mingw\bin,958 KB),在我的 Qt 安装中找到一个(c:\qt\mingw\bin,793 KB) - 这个 mingw 是捆绑的与 Qt。
  8. 我尝试了两者,将它们复制到我所在的同一文件夹中.exe,但都没有奏效。我得到“程序入口点 _ZNSt9exceptionD2Ev 不能位于动态链接库 libstdc++-6.dll 中。” 既。这是在调试中,所以我尝试了发布,我得到了一个类似的错误,没有找到其他一些入口点。
  9. 我搜索了论坛,发现我应该静态链接 libstdc++ 的建议。我-static-libgcc -static-libstdc++在行QMAKE_LFLAGS =QMAKE_LFLAGS_DEBUG =文件中插入c:\Qt\mkspecs\win32-g++\qmake.conf。即使在重新启动 Qt Creator 并重建之后,这也完全没有影响。如果我不复制libstdc++-6.dll,它仍然需要它。

当然,我没有 opencv 的简单测试程序从exe不需要任何运行libstdc++-6.dll,所以这意味着我的 opencv 构建负责?我想重新构建 opencv,但我找不到任何涉及 libstdc++ 的 CMake 设置!

这可能是一个线索: 使用其中一个libstdc++-6.dll文件时,有关缺少入口点的错误提到了 QtGui4.dll。我有一个调试版本,所以它应该是 QtGui* d *4.dll,不是吗?libstdc++调试和发布有不同的s吗?无论哪种方式,我都尝试构建版本,但它也没有工作,同样的错误

这个星球上没有一个人尝试在 Windows xp 上将 Qt 与 QtCreator 和 opencv 2.3 一起使用并成功了吗?通过搜索所有论坛和 Qt 档案,我找不到任何人。我已经准备好在 Linux 中进行开发,但无论如何我迟早需要一个 Windows 版本。

我试图抵制黑暗面的诱惑,它在我耳边低语,忘记 Qt、MinGW、g++、opencv,并尝试在 Visual Basic 中破解一些东西。哦,恐怖!

4

3 回答 3

3

仅供参考,我基本上经历了结合 Qt 和 OpenCV 的噩梦。这是我的经验:

  1. 我用 Qt Creator 2.4.1 下载了 Qt SDK 4.7.4 并安装了它,没问题。
  2. 我下载并安装了 OpenCV 2.4.2,但不知道 MinGW 已经附带了它......
  3. 我下载了 MinGW 编译器,它的版本当然与 Qt 已经附带的版本不同
  4. 这完全搞砸了我的 CMake,即使我明确告诉 CMake 使用 Qt gcc.exe 和 g++.exe,它也使用了我新安装的 MinGW 中的一些东西。可能是因为我急切地将每个目录添加到我的 PATH 变量中。我真是个傻瓜!
  5. CMake 无法生成任何有用的文件,所以我放弃并安装了 OpenCV 超级包,希望这会让事情变得更容易。6.我花了好几个小时想知道,为什么超级包中的 Qt 和 OpenCV 不能一起正常工作。我一直不太明白。我遇到了其他用户在此处描述的相同错误,例如控制台程序在包含某些 OpenCV 后立即崩溃。奇怪的是,我可以从 FileExplorer 手动启动可执行文件(我将所有你能想到的 .dll 添加到项目文件夹中:opencv_core242.dll、opencv_highgui242.dll、QtCore4.dll、QtGui4.dll 等等...... ) 但我无法从 Qt Creator 环境中启动我的小测试程序。
  6. 我使用depends.exe分析了我的DLL是否存在问题,发现即使我使用MinGW编译器将所有内容配置为DEBUG,我的程序仍然尝试使用QtCore4.dll而不是QtCore4d.dll ...所以我最好的猜测是,它混合了调试和发布版本。
  7. 我放弃了使用 superpack 并再次尝试先使用 CMAKE,然后使用 Qt MinGW 版本构建 OpenCV,并确保为调试模式设置所有内容并启用 QT 选项。但到目前为止还没有运气
  8. 我停止使用 MinGW 并切换到 MSVC2010,效果更好。但是我仍然无法调试程序,因为似乎缺少 MSVC2010 调试器引擎。我真的不知道如何手动添加它,但我仍在努力

所以我可以肯定地说,对于没有经验的人来说,使用 Qt 和 OpenCV 绝非易事!

于 2012-09-21T13:57:40.543 回答
2

您应该从源代码构建 OpenCV,就像您已经做过的那样,这并不麻烦。请注意,最新版本的 OpenCV 可以使用和不使用 Qt 构建。Highgui 可以选择使用 Qt!使用或不使用 Qt 构建是您的选择。

我很长一段时间都在使用 Qt 库和 OpenCV。我从未使用过 SDK,而是使用了为相应 VS 版本构建的库。见这里:http: //qt.nokia.com/downloads/downloads#qt-lib

您可以为 VS2008 和 VS2010 使用它,但也可以为 VS2005 构建更早的版本。旧版本的 Visual Studio 太烂了,为什么还要使用它们。

然后,我在 CMake 项目中将它们组合在一起从来没有遇到过问题。它遵循以下原则:

find_package(OpenCV)
find_package(Qt4 ${VOLE_MINIMUM_QT_VERSION} COMPONENTS QtCore QtGui)
find_package(Qt4 ${VOLE_MINIMUM_QT_VERSION} COMPONENTS QtOpenGL)

...

qt4_wrap_cpp(moc_sources ${vole_module_moc_sources})
qt4_wrap_ui(uic_sources ${vole_module_ui_sources})
qt4_add_resources(rcc_sources ${vole_module_rcc_sources})

你知道的,通常的东西。

五个星期后,您可能会在 Windows 下运行它,而在 GNU/Linux 下,它是 shell 中的三个命令。

于 2012-04-07T18:03:48.287 回答
2

您可能会更轻松地使用 OpenCV 配置 Qt Creator。这篇文章展示了如何一步一步地实现这一目标!它还显示了几个屏幕截图以帮助完成此过程。

于 2012-04-08T00:37:52.857 回答