QT中引入OpenCV库总结(qmake方式和cmake方式)

文章目录

前言

我的软件环境,写在前面

  • Windows10
  • QT5.12.12
  • VS2017
  • OpenCV4.5.4

opencv环境配置

一、opencv库获取的两种方式

  1. 直接下载编译好的库
    最简单版本无需自己编译,但是要注意opencv和VS的版本对应关系
  1. 源码编译

二、qmake和cmake配置

2.1、 qmake

2.2、cmake

2.2.1、引入opencv示例
cpp 复制代码
cmake_minimum_required(VERSION 3.5)
project(commandset_cmake LANGUAGES CXX)


# 检查是否使用 MSVC 编译器
if(MSVC)
    # 添加 /utf-8 编译选项
    add_compile_options(/utf-8)
endif()

# 设置C++标准
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找Qt5包
find_package(Qt5 COMPONENTS Core Gui WebEngineWidgets WebSockets Sql MultimediaWidgets Widgets REQUIRED)

# 包含子项目
add_subdirectory(model)
add_subdirectory(view)
add_subdirectory(utilities)

set(OpenCV_DIR "D:/OpenCV/OpenCV4.5.4/opencv/build")
find_package(OpenCV REQUIRED)

# 包含 OpenCV 头文件目录
include_directories(
    ${OpenCV_INCLUDE_DIRS}
    ${OpenCV_DIR}/include
)
# 设置可执行文件的输出目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build)
# 添加可执行文件
add_executable(${PROJECT_NAME} ${ALL_SOURCES}
    mainwindow.h
    mainwindow.cpp
    main.cpp)
# 链接Qt5模块
target_link_libraries(commandset_cmake PRIVATE
    Qt5::Core
    Qt5::Gui
    Qt5::WebEngineWidgets
    Qt5::WebSockets
    Qt5::Sql
    Qt5::MultimediaWidgets
    ${OpenCV_LIBS}  # 关联OpenCV库
)
# 添加资源文件
set(RESOURCES res.qrc)
qt5_add_resources(QRC_SOURCES ${RESOURCES})

# 将资源文件添加到可执行文件
target_sources(${PROJECT_NAME} PRIVATE ${QRC_SOURCES})

三、qt与opencv对应关系

VC版本号 VS对应版本
vc6 VC6.0
vc7 VS2002
vc7.1 VS2003
vc8 VS2005
vc9 VS2008
vc10 VS2010
vc11 VS2012
vc12 VS2013
vc13 VS2014
vc14 VS2015
vc15 VS2017
vc16 VS2019

四、问题

cpp 复制代码
LNK2019	无法解析的外部符号 "void __cdecl cv::error(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *,char const *,int)" (?error@cv@@YAXHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEBD1H@Z),函数 "public: class cv::Size_<int> __cdecl cv::MatSize::operator()(void)const " (??RMatSize@cv@@QEBA?AV?$Size_@H@1@XZ) 中引用了该符号	5.1	F:\Cuda Projects\5.1\5.1\kernel.cu.obj	1	
LNK2019	无法解析的外部符号 "class cv::debug_build_guard::_InputOutputArray const & __cdecl cv::noArray(void)" (?noArray@cv@@YAAEBV_InputOutputArray@debug_build_guard@1@XZ),函数 main 中引用了该符号	5.1	F:\Cuda Projects\5.1\5.1\kernel.cu.obj	1	
LNK2019	无法解析的外部符号 "public: __cdecl cv::Mat::Mat(void)" (??0Mat@cv@@QEAA@XZ),函数 "public: __cdecl cv::MatExpr::operator class cv::Mat(void)const " (??BMatExpr@cv@@QEBA?AVMat@1@XZ) 中引用了该符号	5.1	F:\Cuda Projects\5.1\5.1\kernel.cu.obj	1	
LNK2019	无法解析的外部符号 "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ),函数 main 中引用了该符号	5.1	F:\Cuda Projects\5.1\5.1\kernel.cu.obj	1	
......
如果你的qt程序opencv库配置都没问题,报这个错的原因就是库版本的问题,查看opencv库中build下的x64文件夹下是vc14、vc15还是vc16,这很重要

参考:LNK2019 无法解析的外部符号 "void __cdecl cv::error(int,class std::basic_string<char,struct std::...

相关推荐
酷炫码神28 分钟前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
Elastic 中国社区官方博客1 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1881 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn2 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
传奇开心果编程3 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw3 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
电子云与长程纠缠3 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
cspttty3 小时前
2027风险管理岗准备路线:数学与应用数学如何补齐金融、SQL与Python
开发语言·python·金融
我命由我123453 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
严谨的麻辣烫4 小时前
Python HTTP 连接池怎么用?从连接复用到请求异常排查
开发语言·python·http·requests·网络排查