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

server/2025/1/13 17:26:38/

文章目录

  • 前言
  • opencv环境配置
    • 一、opencv库获取的两种方式
    • 二、qmake和cmake配置
      • 2.1、 qmake
      • 2.2、cmake
    • 三、qtopencv对应关系
    • 四、问题

前言

我的软件环境,写在前面

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

opencv_7">opencv环境配置

opencv_8">一、opencv库获取的两种方式

  1. 直接下载编译好的库
    最简单版本无需自己编译,但是要注意opencv和VS的版本对应关系
  • 参考:Windows上Qt配置OpenCV(最简单版本无需自己编译-避坑必看)
  1. 源码编译
  • 参考:Windows下Visual Studio 编译OpenCV详细教程(win10+vs2017+opencv4.5.2)(OpenCV最新版)(特别适合无法科学上网的童鞋们)

二、qmake和cmake配置

2.1、 qmake

  • 引入外部库
    两种方式:参考:详解Qt添加外部库

2.2、cmake

opencv_21">2.2.1、引入opencv示例
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.hmainwindow.cppmain.cpp)
# 链接Qt5模块
target_link_libraries(commandset_cmake PRIVATEQt5::CoreQt5::GuiQt5::WebEngineWidgetsQt5::WebSocketsQt5::SqlQt5::MultimediaWidgets${OpenCV_LIBS}  # 关联OpenCV库
)
# 添加资源文件
set(RESOURCES res.qrc)
qt5_add_resources(QRC_SOURCES ${RESOURCES})# 将资源文件添加到可执行文件
target_sources(${PROJECT_NAME} PRIVATE ${QRC_SOURCES})

qtopencv_83">三、qtopencv对应关系

VC版本号VS对应版本
vc6VC6.0
vc7VS2002
vc7.1VS2003
vc8VS2005
vc9VS2008
vc10VS2010
vc11VS2012
vc12VS2013
vc13VS2014
vc14VS2015
vc15VS2017
vc16VS2019

四、问题

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


http://www.ppmy.cn/server/158047.html

相关文章

Java手动打印执行过的sql

1. 拦截器 package com.xxx.platform.common.interceptor;import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder; import com.xxx.platform.common.aop.OLAPQuery; import com.xxx.platform.constant.CommonConstant; import com.xxx.platform.uti…

maven的生命周期

1.maven的生命周期是什么&#xff1f; Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。 2.Maven中有3套相互独立的生命周期&#xff1a; clean&#xff1a;清理工作。 default&#xff1a;核心工作&#xff0c;如&#xff1a;编译、测试、打包、安装、部署等…

web-前端小实验5

实现以上图片中的内容 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&…

Linux一键安装Docker和Docker Compose

Centos docker安装脚本 #!/bin/bash# docker_manager.sh # 用于管理 Docker 和 Docker Compose 的交互脚本# # 配置变量 # # Docker 仓库地址 DOCKER_REPO"https://download.docker.com/linux/centos/docker-ce.repo"# # 函数定义 # # 安装 Docker 和 Docker Comp…

Python创建GitHub标签的Django管理命令

在软件开发过程中,版本控制是非常重要的一环。GitHub作为最流行的代码托管平台之一,提供了强大的版本控制功能。其中,标签(Tag)是一个非常有用的功能,它可以帮助我们标记重要的代码版本。本文将介绍如何使用Python创建一个Django管理命令,用于自动化创建GitHub标签。 © iv…

AI大模型-提示工程学习笔记4

卷首语&#xff1a;我所知的是我自己非常无知&#xff0c;所以我要不断学习。 写给AI入行比较晚的小白们&#xff08;比如我自己&#xff09;看的&#xff0c;大神可以直接路过无视了。 不同主题提示词可以完成不同基本任务&#xff0c;常见的提示主题有&#xff1a; 文本概…

Mysql--运维篇--主从复制和集群(主从复制I/O线程,SQL线程,二进制日志,中继日志,集群NDB)

一、主从复制 MySQL的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据冗余和高可用性的解决方案&#xff0c;它通过将一个或多个从服务器&#xff08;Slave&#xff09;与主服务器&#xff08;Master&#xff09;同步来实现。主从复制的基本原理是&#…

【25考研】川大计算机复试情况,重点是啥?怎么准备?

24年进入复试的同学中&#xff0c;有10位同学的复试成绩为0分。具体是个人原因还是校方原因&#xff0c;还尚不明确。但是C哥提醒&#xff0c;一定要认真复习&#xff01;复试完后不要跟任何人讨论有关复试的题目及细节&#xff01; 一、复试内容 四川大学复试内容较多&#xf…