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

相关推荐
小白学大数据21 小时前
基于Python的抖音网页版视频点赞数增长趋势追踪系统设计与实现
开发语言·爬虫·python·搜索引擎·音视频
木由里予21 小时前
TEE(Trusted Execution Environment)技术详解
java·linux·开发语言·网络·嵌入式硬件·android-studio
JckOLF04Z1 天前
C#客户端的异步操作
开发语言·c#
曹牧1 天前
C#:注释嵌套
开发语言·c#
中国搜索直付通1 天前
游戏车机端支付通道,会是下一个被低估的合规战场吗?
java·大数据·开发语言·人工智能·游戏
LccKyI1 天前
C# 零基础学习 Day01|基础概念梳理 + 思维导图总结
开发语言·笔记·学习·c#
AKA__Zas1 天前
芝士算法(位运算)
java·开发语言·算法·leetcode·学习方法
Livia要学习1 天前
Python三种常见高阶函数--map、filter、sorted
开发语言·python
奇树谦1 天前
ZeroMQ 详解:轻量级高性能消息通信框架及 C++ 使用示例
开发语言·c++
不相心 -w-1 天前
现代C++——智能指针
开发语言·c++