热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QtWindowsMinGWOpenCV配置

本方法使用的是Win10家庭版操作系统,Qt5.14,Qt自带的MinGW32位编译器,编译配置OpenCV4.12contrib

本方法使用的是Win10家庭版操作系统,Qt 5.14,Qt自带的MinGW 32位编译器,编译配置OpenCV 4.12+contrib,来为Qt结合OpenCV开发程序所用。

1.安装应用程序
安装Qt 5.14,在安装时选择MinGW 32位编译器。安装CMake

2.配置系统环境变量
在系统的Path环境变量中,添加MinGW和CMake的相关信息,本系统Qt的安装位置为:D:\Qt\Qt5.14.2\,CMake的安装位置为:D:\Program Files\CMake\,添加结果如下图所示:
在这里插入图片描述
3.重启系统,使环境变量配置生效

4.打开CMake进行相关设置
将OpenCV和contrib的文件分别解压缩到桌面,以便于后续操作,分别得到C:\Users\think\Desktop\opencv-4.1.2\和C:\Users\think\Desktop\opencv_contrib-4.1.2\,并在桌面创建C:\Users\think\Desktop\MinGW_build\文件夹,用于保存配置生成的文件。
打开CMake配置目录如下:
在这里插入图片描述
点击Configure按钮进行如下配置:
在这里插入图片描述
在这里插入图片描述
其中C栏对应的文件路径为D:/Qt/Qt5.14.2/Tools/mingw730_32/bin/gcc.exe,C++栏对应的文件路径为D:/Qt/Qt5.14.2/Tools/mingw730_32/bin/g++.exe
不要在设置目录的时候,包含有c++命名的文件目录,否则会出错。
点击Finish按钮得到如下界面:
在这里插入图片描述
其中WITH分组各选项对应的含义如下:
WITH分组
(1)WITH_1394:提供对1394接口的相机驱动支持
(2)WITH_ADE:gapi模块的编译依赖于ADE
(3)WITH_ARITH_DEC:libjpeg模块依赖它
(4)WITH_ARITH_ENC:libjpeg模块依赖它
(5)WITH_CLP:CLP是开源的线性规划程序求解器
(6)WITH_CUDA:提供对加速并行计算CUDA包的支持
(7)WITH_DIRECTX:DirectX是微软做的一个超大的多媒体处理合集,包括音频和视频处理等功能
(8)WITH_DSHOW:DirectShow是微软公司开发的新一代基于COM的流媒体处理的开发包,与DirectX开发包一起发布
(9)WITH_EIGEN:Eigen是支持线性代数、矩阵、矢量运算、数值分析的库,使用该选项OpenCV只是提供了与Eigen的转换接口,并没有什么性能效果
(10)WITH_FFMPEG:FFmpeg是一套可以用来记录、转换数字音频、视频,并将其转换为流的开源程序,其在Linux下开发
(11)WITH_GDAL:GDAL是一个在X/MIT许可协议下的开源栅格空间数据转换库,很多著名的GIS(地理信息系统)类产品都使用GDAL库
(12)WITH_GDCM:DICOM即医学数字成像和通信,是医学图像和相关信息的国际标准,其定义了质量能满足临床需要的可用于数据交换的医学图像格式,被广泛应用于X射线、CT、核磁共振、超声等设备
(13)WITH_GSTREAMER:GStreamer是用来构建流媒体应用的开源多媒体框架,其目标是简化音/视频应用程序的开发,在Linux平台下开发
(14)WITH_HALIDE:Halide是用C++作为宿主的图像处理DSL语言,其特点是其图像算法的计算实现和这些计算在计算硬件单元上的调度是分离的,最终将整个图像算法转换为高效率的多层for循环,其能支持的硬件包括CPU、GPU、DSP、FPGA和ASIC
(15)WITH_HPX:HPX是用于任何规模的并行和分布式应用的C++标准库
(16)WITH_IMGCODEC_HDR:提供HDR(高动态范围图像)的支持
(17)WITH_IMGCODEC_PFM:提供PFM(一种浮点像素的图像格式,包含文件信息和文件二进制数据两部分内容)格式文件的支持
(18)WITH_IMGCODEC_PXM:提供PNM(包括PPM、PGM、PBM是跨平台的图像格式)格式文件的支持和PAM(一种动画图像文件格式)格式文件的支持
(19)WITH_IMGCODEC_SUNRASTER:提供Sun Raster(一种流行的图像文件格式)格式文件的支持
(20)WITH_INF_ENGINE:提供Intel的推理引擎支持,其基于强劲的GPU和CPU计算资源,为用户提供AI模型部署和模型推理服务,用于DNN模块可提高处理速度
(21)WITH_IPP:提供Intel IPP支持,其是一套跨平台的软件函数库,提供广泛的多媒体功能:音频解码、图像处理、信号处理、语音压缩等
(22)WITH_ITT:提供Intel的仪器和跟踪技术(ITT)支持,使你的应用程序能在执行期间生成和控制跟踪数据的收集
(23)WITH_JASPER:提供JPEG2000支持
(24)WITH_JPEG:提供JPEG支持
(25)WITH_LAPACK:提供LAPACK库支持,其包含求解科学与工程计算中最常见的数值线性代数问题,如求解线性方程组、线性最小二乘、特征值、奇异值等问题,是一自动并行化优化工具
(26)WITH_LIBREALSENSE:提供Intel的RealSense SDK支持,其是对RealSense深度摄像机和跟踪相机,提供深度和颜色流,及内部和外部校准信息
(27)WITH_MATLAB:提供MATLAB支持(OpenCV contrib)
(28)WITH_MSMF:提供基于Media Foundation的VideoIO支持,用于视频流处理
(29)WITH_MSMF_DXVA:在Media Foundation后端使能硬件加速
(30)WITH_OPENCL:提供OpenCL运行时支持,是面向异构系统通用目的的并行编程的开放式标准,便于软件人员为高性能计算服务器、桌面计算系统和手持设备编写高效轻便的代码,广泛用于多核处理器(CPU)、GPU、Cell类型架构和DSP等其他并行处理器
(31)WITH_OPENCLAMDBLAS:提供AMD OpenCL BLAS库支持
(32)WITH_OPENCLAMDFFT:提供AMD OpenCL FFT库支持
(33)WITH_OPENCL_D3D11_NV:提供NVIDIA OpenCL D3D11支持,D3D11是Direct3D 11的简写,其是微软为游戏、科学和桌面应用创建三维图形提供SDK
(34)WITH_OPENCL_SVM:提供OpenCL的共享虚拟内存支持,其是由于使用OpenCL在CPU和GPU之间进行数据传输时非常耗时,为了解决该瓶颈,通过SVM技术提供不需要数据拷贝的数据共享,从而加速处理(但有国内人员进行测试并没有什么加速效果)
(35)WITH_OPENEXR:通过OpenEXR(一种开放标准的高动态范围图像格式,在计算机图形学中被广泛用于存储图像数据)提供ILM(工业光魔,是著名的电影特效制作公司)支持
(36)WITH_OPENGL:提供OpenGL(开放式图形库)支持,是用于渲染2D、3D矢量图形和三维景象的跨语言和跨平台应用程序编程接口,其常被用于CAD、虚拟现实、科学可视化和电子游戏开放
(37)WITH_OPENMP:提供OpenMP支持,是用于共享内存并行系统的多处理器程序设计的编译处理方案(在OpenCV2.3版本后抛弃OpenMP转向TBB)
(38)WITH_OPENNI:提供OpenNI(开放自然交互和三维感知)支持,其是跨语言和跨平台的框架的通用自然交互应用接口,是用于搭建视觉和音频传感器与视觉和音频感知中间件通信的桥梁
(39)WITH_OPENNI2:提供OpenNI2支持,其是OpenNI的第二代,更加专注于对3D设备的支持和数据获取,移除了手势识别等中间件方式
(40)WITH_OPENVX:提供OpenVX支持,其是跨平台计算机视觉应用加速的标准,其实现了计算机视觉处理中性能和能耗方面的优化,特别是在嵌入式和实时应用案例中起重要作用
(41)WITH_PNG:提供PNG支持
(42)WITH_PROTOBUF:使能libprotobuf,其是Google开发的跨语言和跨平台的协议缓冲区库,用于序列化结构化数据
(43)WITH_PTHREADS_PF:使用基于pthreads的并行化,主要用于Linux系统
(44)WITH_PVAPI:提供Prosilica GigE支持,Prosilica是加拿大的一家工业相机公司,GigE是千兆以太网标准接口
(45)WITH_QT:建立与Qt后端的支持
(46)WITH_QUIRC:提供QR码解码库支持
(47)WITH_TBB:提供Intel TBB支持,其是使用ISO C++代码实现的跨平台可扩展的并行编程库
(48)WITH_TESSERACT:提供Tesseract OCR库支持,其是Google发布的开源OCR识别引擎
(49)WITH_TIFF:提供TIFF(标签图像文件格式)支持
(50)WITH_VTK:提供VTK库支持(用于建立opencv_viz模块),其是跨平台的,主要用于三维计算机图形学、图像处理和可视化
(51)WITH_VULKAN:提供Vulkan支持,其是跨平台的2D和3D绘图应用程序接口,类似于OpenGL,主要针对3D程序(电子游戏)设计
(52)WITH_WEBP:提供WebP支持,其是一种同时提供有损压缩和无损压缩的图片文件格式
(53)WITH_WIN32UI:使用win32 UI后端建立支持
(54)WITH_XIMEA:提供XIMEA摄像机支持,XIMEA是德国的一家工业相机公司
在Ungrouped Entries中有一个OpenCV_HAL_DIR,该项与所谓的HAL(硬件加速层)实现相关,但介质2020.03,使用HAL的代码尚不完善,因此无需选择
在OPENCV中有一个OPENCV_FORCE_3RDPARTY_BUILD,网上查无相关资料,因此暂不是选择。
取消勾选WITH_IPP,同时勾选WITH_OPENGL和WITH_QT。
虽然勾选WITH_OPENCLAMDBLAS,但由于网上无法查找有效的配置方法,因此会显示该相关内容未找到,该勾选基本无效。
相比默认设置,还取消勾选了WITH_1394,WITH_EIGEN,WITH_LAPACK,WITH_TESSERACT。确保WITH_OPENCL被勾选且有效。
由于只使用OpenCV的C++功能,BUILD分组中进行如下修改:
取消勾选BUILD_EXAMPLES、BUILD_JAVA、BUILD_opencv_java_bindings_generator、BUILD_opencv_python_bindings_generator、BUILD_opencv_python_test,不要勾选BUILD_opencv_world
OPENCV分组中进行如下修改:
勾选OPENCV_ENABLE_NONFREE,OPENCV_EXTRA_MODULES_PATH选择C:/Users/think/Desktop/opencv_contrib-4.1.2/modules并按回车
点击Configure按钮进行一次刷新,此时应该在配置信息栏还是红色。
此时由于配置了使用FFMPEG和OpenCV contrib的xfeatures2d和face模块,此时进行配置会显示缺少相关文件,且下载失败导致整个编译失败。
此时需下载以下文件:
(1)opencv_ffmpeg.dll,opencv_ffmpeg_64.dll,ffmpeg_version.cmake
(2)boostdesc_bgm.i,boostdesc_bgm_bi.i,boostdesc_bgm_hd.i,boostdesc_binboost_064.i,boostdesc_binboost_128.i,boostdesc_binboost_256.i,boostdesc_lbgm.i,vgg_generated_48.i,vgg_generated_64.i,vgg_generated_80.i,vgg_generated_120.i
(3)face_landmark_model.dat
然后进行以下操作:
(1)确保C:\Users\think\Desktop\MinGW_build\3rdparty\ffmpeg\文件夹下包含如图所示的文件:
在这里插入图片描述
(2)使用上述(1)中文件替换C:\Users\think\Desktop\opencv-4.1.2.cache\ffmpeg\中的文件,使原来的大小为0的文件被替换为不为0的文件,文件名仍按照原来系统自动生成的MD5哈希码值的文件名,如下图:
在这里插入图片描述
(3)将上述(2)中的所有文件复制到C:\Users\think\Desktop\opencv_contrib-4.1.2\modules\xfeatures2d\src\文件夹下
(4)将上述(2)中的boostdesc_bgm.i,boostdesc_bgm_bi.i,boostdesc_bgm_hd.i,boostdesc_binboost_064.i,boostdesc_binboost_128.i,boostdesc_binboost_256.i,boostdesc_lbgm.i文件复制到C:\Users\think\Desktop\opencv-4.1.2.cache\xfeatures2d\boostdesc\文件夹下,使原来的大小为0的文件被替换为不为0的文件,文件名仍按照原来系统自动生成的MD5哈希码值的文件名,如下图:
在这里插入图片描述
(5)将上述(3)中的所有文件复制到C:\Users\think\Desktop\opencv_contrib-4.1.2\modules\face\src\文件夹下
重新点击Configure按钮进行刷新,直到状态栏所有状态都变为白色,且在输出信息栏使用Goto Next Error查找无警告无错误为止。
点击Generate按钮生成编译文件。关闭CMake。
在C:\Users\think\Desktop\opencv-4.1.2\cmake\文件中找到OpenCVCompilerOptions.cmake文件,使用笔记本打开,找到add_extra_compiler_option(-Werror=non-virtual-dtor)语句,在其前面加#注释掉,为生成做准备。

5.打开cmd.exe,切换到C:\Users\think\Desktop\MinGW_build\目录,输入
mingw32-make语句进行生成。
在这里插入图片描述
整个生成过程大约需要1.5h。
再输入mingw32-make install进行安装,到此就安装完成。
如果出现以下错误:

CMake Error at modules/videoio/cmake_install.cmake:79 (file):
file INSTALL cannot find
"C:/Users/think/Desktop/MinGW_build/3rdparty/ffmpeg/opencv_videoio_ffmpeg.dll":File exists.Call Stack (most recent call first):modules/cmake_install.cmake:139 (include)cmake_install.cmake:105 (include)mingw32-make: *** [Makefile:157: install] Error 1

则将opencv_videoio_ffmpeg.dll文件复制到C:/Users/think/Desktop/MinGW_build/3rdparty/ffmpeg/文件夹下,重新进行安装。
安装完成后,整个MinGW_build文件夹有1.5G,其中只有\MinGW_build\install\文件夹内的内容有用,其他都可以删除。

6.为Qt配置OpenCV
将C:\Users\think\Desktop\MinGW_build\install\文件夹复制到其他位置,并重命名以便于后续软件开发使用。这里我将其复制并重命名为D:\opencv_mingw_lib\。
在该文件夹下使用记事本新建一个opencv.pri文件,内容如下:

INCLUDEPATH += D:/opencv_mingw_lib/include/LIBS += D:/opencv_mingw_lib/x86/mingw/lib/libopencv_*.a

在系统的Path环境变量中,添加OpenCV相关DLL的信息,加结果如下图所示:
在这里插入图片描述
重启计算机使环境变量配置生效。
此后再开发基于Qt的OpenCV项目时,只需在项目的*.pro文件的最后添加如下内容:

win32: {include("D:/opencv_mingw_lib/opencv.pri")
}

即会在项目中包含之前创建的opencv.pri文件,然后在相关代码文件中添加OpenCV头文件引用,即可实现OpenCV的调用。


推荐阅读
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在腾讯云服务器上部署Nginx的详细指南中,首先需要确保安装必要的依赖包。如果这些依赖包已安装,可直接跳过此步骤。具体命令包括 `yum -y install gcc gcc-c++ wget net-tools pcre-devel zlib-devel`。接下来,本文将详细介绍如何下载、编译和配置Nginx,以确保其在腾讯云服务器上顺利运行。此外,还将提供一些优化建议,帮助用户提升Nginx的性能和安全性。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文详细解析了Autofac在高级应用场景中的具体实现,特别是如何通过注册泛型接口的类来优化依赖注入。示例代码展示了如何使用 `builder.RegisterAssemblyTypes` 方法,结合 `typeof(IEventHandler).Assembly` 和 `Where` 过滤条件,动态注册所有符合条件的类,从而简化配置并提高代码的可维护性。此外,文章还探讨了这一方法在复杂系统中的实际应用及其优势。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在C语言程序开发中,调试和错误分析是确保代码正确性和效率的关键步骤。本文通过一个简单的递归函数示例,详细介绍了如何编写和调试C语言程序。具体而言,我们将创建一个名为 `factorial.c` 的文件,实现计算阶乘的功能,并通过逐步调试来分析和解决可能出现的错误。此外,文章还探讨了常见的调试工具和技术,如GDB和断点设置,以帮助开发者高效地定位和修复问题。 ... [详细]
  • 本文对常见的字符串哈希函数进行了全面分析,涵盖了BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash等多种算法。这些哈希函数在不同的应用场景中表现出各异的性能特点,通过对比其算法原理、计算效率和碰撞概率,为实际应用提供了有价值的参考。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
author-avatar
一千万223
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有