Apply OpenCV In QtCreator:在Qt中使用OpenCV环境
一篇水文,部署没什么难度,环境变量重复包含居然会导致编译通过但无法在QtCreator运行,记录一下。
Qt的OpenCV环境部署
在此前一篇文章OpenCV C++记录(一):基于MinGW的环境搭建我们使用了mingw通过cmake编译OpenCV 4.5.5,因为勾选了With QT选项现在可以直接将OpenCV集成到Qt项目,仍然采用cmake管理。
自动关联路径
Qt的cmake可以通过find_package
来自动搜索依赖包,我们只需要包含OpenCV的编译路径即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29cmake_minimum_required(VERSION 3.5)
project(QtOpenCVtest)
set(CMAKE_AUTOMOC ON)
find_package(Qt5
COMPONENTS
Core
# Gui
# Widgets
REQUIRED
)
set(OpenCV_DIR "D:/opencv-4.5.5/build/install") #设置install路径
find_package(OpenCV REQUIRED)
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
main.cpp
)
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS}) #设置头文件
target_link_libraries(${PROJECT_NAME} PRIVATE #设置库文件
Qt5::Core
# Qt5::Gui
# Qt5::Widgets
${OpenCV_LIBS}
)
手动关联路径
首先要从之前的编译步骤获取OpenCV库的头文件和库文件路径,例如:
1
2D:/opencv-4.5.5/build/install/include #头文件路径
D:/opencv-4.5.5/build/install/x64/mingw/lib #库文件路径
这种方法好处是能够灵活引入库,以下引入了5个常用的cv库,基本涵盖了大部分开发需求:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48cmake_minimum_required(VERSION 3.5)
project(QtOpenCVtest)
set(CMAKE_AUTOMOC ON)
find_package(Qt5
COMPONENTS
Core
# Gui
# Widgets
REQUIRED
)
# 自动
#set(OpenCV_DIR "D:/opencv-4.5.5/build/install")
#find_package(OpenCV REQUIRED)
add_executable(${PROJECT_NAME})
target_sources(${PROJECT_NAME} PRIVATE
main.cpp
)
# 自动
#target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
#target_link_libraries(${PROJECT_NAME} PRIVATE
# Qt5::Core
## Qt5::Gui
## Qt5::Widgets
# ${OpenCV_LIBS}
#)
#手动管理
target_include_directories(${PROJECT_NAME} PRIVATE D:/opencv-4.5.5/build/install/include)
target_link_directories(${PROJECT_NAME} PRIVATE D:/opencv-4.5.5/build/install/x64/mingw/lib)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt5::Core
# Qt5::Gui
# Qt5::Widgets
# ${OpenCV_LIBS} #自动
opencv_calib3d455 #手动链接
opencv_core455
opencv_highgui455
opencv_imgproc455
opencv_imgcodecs455
)
测试程序:
1 |
|
Q&A
无论哪种方法,如果能通过编译生成可执行文件就说明链接问题不大,头疼的是这里遇到了两个问题,摸索着还算是解决了:
- Qt运行程序显示:
1
Cannot retrieve debugging output.
- 当Qt多开时会出现这个报错,必须关闭另一个Qt调试进程才能调试另一个进程!
双击程序/命令行下均可运行,但在QtCreator报错:程序异常结束; 这个提示是比较扯淡的,只提示异常结束却没有具体错误,但是思考一下,既然编译能通过并且能在Win10环境运行,说明cmake编译和代码是没问题的,问题出在QtCreator的运行环境。
反复检查了系统环境变量,Qt和OpenCV变量的顺序和设置都是ok的,因为它们在其他工程被引用过。
此处打开QtCreator左侧项目,选择对应的kit的Run选项,查看Qt中的PATH环境变量,发现除了系统环境变量,Qt还加上了:
这也是本文用到的环境变量似乎没有问题,但是这些已经在系统环境变量中包含了,重复包含就出现了这个报错,找了半天原来这是罪魁祸首;1
2
3
4D:\Qt\5.12.12\mingw73_64\lib
D:\Qt\5.12.12\mingw73_64\bin
D:\opencv-4.5.5\build\install\x64\mingw\lib
D:\opencv-4.5.5\build\install\x64\mingw\bin- 界面中有一个选项"Add build library search path to PATH",取消这项勾选即可仅使用系统环境变量,运行成功。
解决本错误过程中还发现其他原因虽然不是本文解决的方法,但也可能导致这样的报错(这些双击程序未必可运行),记录以供参考:
release误用了debug库或debug版本误用release库,这种情况两个版本都试试即可排除;
系统环境变量设置错误/没有生效:检查与重启大法;
系统库缺失/第三方库本身有缺陷问题,这个重装万不得已再试吧。