QT+opencv源码编译

时间记录:2024/1/20

一、版本介绍

QT5.12.7+cmake3.22.0+opencv4.5.4

二、编译步骤

(1)下载opencv源码,然后安装,opencv的安装即对源码的解压过程,解压后的文件目录如下
opencv源码目录
(2)opencv安装解压后的目录介绍:

  1. build文件夹vs编译源码后的文件,QT项目使用vs套件编译的可以直接使用本文件夹下的文件
  2. sources文件夹opencv的源代码,mingw32套件编译qt源码的项目需要先使用mingw32编译器编译opencv源码,然后引入QT进行使用。

(3)配置环境变量,将cmake和QT的mingw32编译器的路径添加到Path环境变量中(注意:QT两个路径)
环境变量
(4)QT的两个路径,一个是gcc和g++所在的路径,一个是qmake所在的路径
(5)打开cmake-gui界面,"Where is the source code"选项选择opencv源码的文件夹,"Where to build the binaries"选项选择一个新建的文件夹保存编译后的文件和编译过程中产生的中间文件
cmake-gui选择源码
(6)选择完毕后,点击左下方的Configure按钮配置mingw32编译器
配置mingw32编译器
(7)选择MinGW Makefiles,"Specify native compilers"自定义编译器
mingw配置
(8)编译器选择QT的Tools目录下对应套件下的gcc和g++编译器来编译c和c++程序
选择c/c++编译器
(9)点击Finish便会开始进行opencv默认组件的编译
(10)ffmpeg下载报错,原因ffmpeg在外网,网络连接失败/超时
下载ffmpeg报错
解决办法:
  https://github.com/opencv/opencv_3rdparty下载正确版本的ffmpeg,opencv4.5.4对应版本20211005,将下载的文件中“ffmpeg_version.cmake”、“opencv_videoio_ffmpeg.dll”和“opencv_videoio_ffmpeg_64.dll”三个文件复制到opencv的下载缓存文件夹“sources.cache\ffmpeg”中,然后打开cmd窗口切换到此文件夹,然后输入命令“certutil -hashfile 文件名 MD5”查看文件的MD5码,查看和未下载成功文件的MD5码是否相同,相同则修改文件名,然后重新点Configure
md5码查看
修改前文件
修改前文件
修改后文件
修改后文件
文件大小不对便是没有下载成功
(11)Configure之后窗口没有报红便编译成功了
编译成功截图
(12)组件设置,可以在Search框中直接搜名字查找
组件设置
”CMAKE_BUILD_TYPE“设置编译类型,Debug和Release
”WITH_1394“选择框选中
“WITH_OPENGL”选择框选中
“WITH_QT”选择框选中
其他的选项保持默认即可,然后再次点击Configure
(13)Configure完毕后将QT的一些路径进行设置为自己本地安装的QT路径,这是以后编译QT项目时候使用到的文件查找路径,设置完毕后再次Configure
QT文件夹选择
(14)框中显示Configure done便完成了配置
配置完成界面
(15)点击Generate生成Makefile,完成后显示“Generating done”
生成makefile成功
(16)关闭cmake-gui,打开cmd,切换到opencv的编译路径下,开始使用mingw32进行编译安装,“mingw32-make -j8”,使用Makefile进行编译,“-j 8”表示使用8个线程进行编译,编译速度快一些,编译前可以先查看一下电脑的线程数
(17)编译libopencv_corexxx.dll报错中断退出
编译报错
解决办法:返回cmake,添加Entry,名字为OPENCV_VS_VERSIONINFO_SKIP,Value选中,将CMAKE_CXX_FLAGS选项的值修改为“-std=c++11”,支持c11,然后再次Configure,Generate,mingw32-make -j8进行编译,成功编译后进行安装
添加Entry
(18)使用mingw32-make install命令进行安装,安装成功后便会在同级目录下生成一个install文件夹,这个文件夹下便是mingw套件编译源码后的文件
安装成功文件夹

三、QT中使用opencv

(1)将opencv的install文件夹下的“\x64\mingw\bin”,路径添加到环境变量Path
(2)新建QT项目,注意:选择编译套件的时候一定要选择和opencv编译时候用的套件一致
(3)QT项目在pro文件中使用INCLUDEPATH引入opencv的头文件,LIBS引入opencv的静态文件

INCLUDEPATH += D:\apps\Opencv\opencv\mingw32-build\install\include
LIBS += D:\apps\Opencv\opencv\mingw32-build\lib\libopencv_*.a

(4)引入头文件#include “opencv/opencv.hpp”
(5)使用cv命名空间using namespace cv;
(6)使用opencv中的函数编写项目
(7)发布程序,使用windeployqt程序将qt的dll文件复制到程序目录下,然后运行程序,因为缺少opencv的dll文件会报错,程序无法运行,根据报错时提示缺少哪些dll文件,到opencv的install目录下复制到发布的应用程序同级目录下,问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/419012.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…

Leetcode2829. k-avoiding 数组的最小总和

Every day a Leetcode 题目来源&#xff1a;2829. k-avoiding 数组的最小总和 解法1&#xff1a;贪心 哈希 从 1 开始枚举数 x&#xff0c;如果 k - x 不在哈希表里&#xff0c;说明可以插入 k-avoiding 数组&#xff0c;sum 加上 x&#xff0c;向哈希表插入 x。 当哈希表…

131. 分割回文串 - 力扣(LeetCode)

问题描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 输入示例 s "aab"输出示例 [["a","a","b"],["…

分布式锁的产生以及使用

日常开发中&#xff0c;针对一些需要锁定资源的操作&#xff0c;例如商城的订单超卖问题、订单重复提交问题等。 都是为了解决在资源有限的情况限制客户端的访问&#xff0c;对应的是限流。 单节点锁问题 目前针对这种锁资源的情况采取的往往是互斥锁&#xff0c;例如 java 里…

高性能跨平台网络通信框架 HP-Socket v5.9.5

项目主页 : http://www.oschina.net/p/hp-socket开发文档 : https://www.docin.com/p-4478351216.html下载地址 : https://github.com/ldcsaa/HP-SocketQQ Group: 44636872, 663903943 v5.9.5 更新 一、主要更新 问题修复&#xff1a;由于 v5.9.4 版本升级了 KCP 导致 UDP AR…

C语言中的变量与scanf介绍(干货)

目录 前言 一、变量 1. 变量的创建 2. 变量的分类 3. 强制类型转换 二、scanf介绍 1. scanf的基本用法 2. scanf的返回值 3. scanf的占位符 4. 赋值忽略符 结语&#xff1a; 前言 我们在前面的文章中介绍了数据类型&#xff0c;以及printf函数的使用。 C语言中的数…

为什么使用物理、数学等工具不能实现对人类智能的模拟

物理和数学是研究自然界和抽象概念的工具&#xff0c;它们为我们提供了理论和方法来解决问题。在实现类人的智能方面&#xff0c;物理和数学可以应用于以下几个方面&#xff1a; 1、计算机科学和算法 数学中的逻辑、统计学和优化理论等可以用于开发智能算法和机器学习模型。这些…

Frenet坐标系下动态街道场景的最优轨迹生成

0 前言 有两个主要算法已经在实际中使用&#xff1a; &#xff08;1&#xff09;大多数研究组采用插值来解决规划问题&#xff0c;如奥迪、斯坦福最近演示中使用了回旋曲线&#xff0c;贝塞尔以及多项式曲线也被其他研究组使用。主要原因是在结构化环境中增强映射可以提供所需…

web蓝桥杯真题--12、由文本溢出引发的“不友好体验”

背景介绍 通常情况下&#xff0c;为保证布局的稳定性&#xff0c;以及遵循在有限的空间展示更多内容的原则&#xff0c;页面的某块区域不会随内容的增多而无限增高或增宽&#xff0c;一般会有一个约束。 例如&#xff1a;整体元素过多可以使用滚动条&#xff1b;文字内容过多…

flask 与 小程序 购物车 展示功能

mina/pages/cart/index.wxml <!--index.wxml--> <view class"container"><view class"title-box" wx:if"{{ !list.length }}">购物车空空如也&#xff5e;</view><view class"to-index-btn" bindtap"…

在k8s上部署ClickHouse

概述 clickhouse的容器化部署&#xff0c;已经有非常成熟的生态了。在一些互联网大厂也已经得到了大规模的应用。 clickhouse作为一款数据库&#xff0c;其容器化的主要难点在于它是有状态的服务&#xff0c;因此&#xff0c;我们需要配置PVC。 目前业界比较流行的部署方式有…

[每日一题] 01.20

文章目录 Apples Plus找最小值分类平均一尺之棰 Apples Plus L int(input()) for i in range(1,L 1):if i 1:print(fToday, I ate 1 apple.)else:print(fToday, I ate {i} apples.)找最小值 a int(input()) b list(map(int,input().split())) print(min(b))分类平均 n,k …