使用 Qt 的程序,OpenCV 从 VS 启动时运行良好,但在使用 OpenCV 功能时运行可执行文件通常会崩溃
Posted
技术标签:
【中文标题】使用 Qt 的程序,OpenCV 从 VS 启动时运行良好,但在使用 OpenCV 功能时运行可执行文件通常会崩溃【英文标题】:Program using Qt, OpenCV runs fine when started from VS, but running the executable ordinarily crashes when OpenCV functionality would be used 【发布时间】:2019-01-04 02:39:53 【问题描述】:我正在尝试部署我的 C++ 程序。如果我从 VS IDE(发布模式)运行程序,它的每个功能都可以工作。当我通常运行相同的可执行文件时,主窗口会正常运行,并且它的非 OpenCV 功能可以正常工作;但是当我尝试打开一张图片并让程序使用 OpenCV 的东西(打开它会调用图片上的几个 OpenCV 操作)时,它会崩溃。
我从 VS 2017 的开发人员命令提示符中成功运行了 windeployqt
。但是,它没有将 OpenCV dll 复制到我的可执行文件旁边,因此我将 opencv_world400.dll
和 opencv_ffmpeg400_64.dll
复制到了其他 dll 旁边。我认为这是我缺少某些东西的步骤。
该文件夹现在看起来像这样:
我正在使用带有 Qt5.10.1 和 OpenCV4.0 的 VS2017。我不认为我可以插入相关代码,因为项目很大,并且广泛使用 OpenCV 功能。
【问题讨论】:
您是否尝试过通过 Dependency Walker 运行它以查看是否缺少任何 DLL? 是的,但是一旦我在 Dependency Walker 中打开它,应用程序就没有响应。 我使用具有上述配置的 Opencv 3.4 并且遇到了类似的问题。问题是,我没有复制 opencv .exe,如 opencv_version.exe 、 opencv_createsamples.exe。简而言之,尝试复制 qt 应用程序旁边 bin 文件夹中的所有内容 谢谢,但这也没有解决问题。 【参考方案1】:我想通了,问题与 OpenCV 无关(opencv_world400.dll
足以复制到文件夹中)。
问题是:我使用 Qt 的 applicationDirPath()
(它返回可执行文件的路径)来访问我之前应该在那里创建的 Results 文件夹,但没有。该程序(如果从 VS 运行)正在访问 Debug 文件夹中现有的 Results 文件夹,即使我在发布模式下运行该程序并且 applicationDirPath()
正在返回Release 文件夹中可执行文件的路径。当我正常运行同一个可执行文件时,它找不到Results文件夹并崩溃了。
【讨论】:
以上是关于使用 Qt 的程序,OpenCV 从 VS 启动时运行良好,但在使用 OpenCV 功能时运行可执行文件通常会崩溃的主要内容,如果未能解决你的问题,请参考以下文章
vs2017+opencv+qt+cuda,使用cmake编译opencv的库
使用opencv时,VS提示“无法启动程序,系统找不到指定文件”,求解答!急!!