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::...

相关推荐
WJ.Polar8 分钟前
Java封装、继承、多态
java·开发语言
摇滚侠20 分钟前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_3077791336 分钟前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
爱读书的小胖1 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
鸽鸽程序猿1 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
Lhappy嘻嘻1 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
weixin_307779132 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
鸽鸽程序猿2 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 个人资料管理的需求分析与接口设计
java·开发语言·交友
1024奇点2 小时前
【仓颉语言入门 · 第二篇 第 8 课】
开发语言·数据库·ide·mysql·开源