前言
因为本人经常用MinGW编译器,而且习惯用64位,但是上网搜索配置方法发现很多都是32位的,而且版本差距太大的话成功率的也不是很高,不知道是不是我自己的原因,然后在面向浏览器搜索了两天之后,也摸索出了一个成功率比较高的方式
文章末尾附编译好的 库或ffmpeg文件 下载方式(编译好的库有 344/450/454 64&32 )
提示:以下是本篇文章正文内容,下面案例可供参考
一、适用版本
MinGW编译OpenCV4(64位/32位通用,附下载)Windows10/11+QT5.14.2+OpenCV4.5.4/OpenCV4.5.0+Cmake3.16.2
适用win11/10 ;
OpenCV 4.5.0 / 4.5.4
QT 编译器版本:mingw73_64/32
二、操作步骤
1.安装和准备需要的软件,设置环境变量
这个直接安装就可以了,不会安装的上网查找安装方式,一堆,没有别的操作,安装完注意配置环境变量
一般配置完环境变量需要重启电脑才能生效,不过有些电脑不需要重启也行;
这里说一个不用重启电脑就可以装载环境变量的方法;(这个方法不一定通用,保险还是重启一下吧)
1 首先设置好环境变量后;
2 在管理员模式终端输入以下命令,重新装载环境变量
set PATH=C
3 退出上面的终端,重新开启一个管理员终端,然后再输入以下命令验证环境变量是否更新成功
echo %PATH%
2.打开opencv文件位置
如果你是安装的OpenCV官方的Windows包,解压之后就会有以下两个文件夹
然后在里面新建一个文件夹用来存放编译的文件
3.配置CMake
按照你的路径选择源码位置 以及刚刚新建的保存位置文件夹
点击左下角Configure
选择编译器 MinGW Makefiles
选择指定本地编译器 Specify native compilers
点击下一步
C选择 gcc.exe
C++选择 g++.exe
按照图上配置 Fortran 不用管 空着
按照你的QT安装路径选择编译器,我现在是编译32位的 用32位的编译器,编译器64位的就选64位路径下的(32 与 64 在别的地方还有点区别等下会说)
点击Finish
然后就开始编译了
编译完成后显示如下 一大片红
这里会有报错
一般来说就是下载ffmpeg失败
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
FFMPEG: Download failed: 6;"Couldn't resolve host name"
For details please refer to the download log file:
H:/OpenCV454/opencv/newbuild/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
modules/videoio/cmake/detect_ffmpeg.cmake:14 (download_win_ffmpeg)
modules/videoio/cmake/init.cmake:7 (include)
modules/videoio/cmake/init.cmake:11 (add_backend)
cmake/OpenCVModule.cmake:298 (include)
cmake/OpenCVModule.cmake:361 (_add_modules_1)
cmake/OpenCVModule.cmake:385 (ocv_glob_modules)
CMakeLists.txt:917 (ocv_register_modules)
去手动下载这个文件
先找到下载路径,在CMakeDownloadLog.txt文件中,这个文件在你创建的存放目录下
打开如下
里面有3个网址 只要下载前面两个红框里的就可以了,链接如下:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/40b4666d1aa374205fd61373496e15d92ecd5313/ffmpeg/opencv_videoio_ffmpeg.dll
https://raw.githubusercontent.com/opencv/opencv_3rdparty/40b4666d1aa374205fd61373496e15d92ecd5313/ffmpeg/opencv_videoio_ffmpeg_64.dll
这个用浏览器打开,没有vpn一般下载不了;
我也是下载别人分享的,文章末尾有下载方式
下载完成之后,把这两个文件放在你安装OpenCV的源码路径下的如下文件夹位置
H:\OpenCV454\opencv\sources\3rdparty\ffmpeg
然后在CMake中修改几个选项
勾选 BUILD_opencv_world (这个也可以不选,勾选之后就是生成把全部库生成为一个库,不勾选就会生成一堆库)根据个人需求;我这里是勾选了)
勾选 WITH_OPENGL
勾选 WITH_OPENMP不勾选 WITH_IPP
不勾选 WITH_OPENCL_D3D11_NV(这个好像只有windwos才有 ,取消勾选减少报错)
不需要勾选WITH_QT的操作(很多教程都要勾选,我是小白也不知道为啥,也不知道为啥不勾选,我这里没有勾选)
这里有个和别的教程不一样的操作
别的都要再点一次Configure
这里不用 配置好后直接点击 Genrate
完成之后 显示如下
Configuring done
Generating done
下一步就是万恶的编译过程了,这过程中有无数个和别人不同的问题,但是按照我这个来,我编译的时候64位没有出现问题,32位出现了一个小问题,等下会说
4.编译源码
在新建的文件路径下打开终端,执行以下命令(这个命令,不管是64位还是32位编译全都用mingw32-make.exe
mingw32-make.exe -j 8
后面的数字表示 编译时使用的核心数 ,根据自己电脑配置来
我在编译32位时,在67%时出现了下面这个错误
这个错误是没有vs_version.rc.obj这个文件(有时可能你打开这个文件位置,发现这个文件躺在那,没事,把它删掉就没有了)
没有这个文件那么就手动生成一个
不用关掉终端
首先找到
vs_version.rc这个文件 路径在
H:\OpenCV454\opencv\newbuild\modules\world\
然后使用 对应编译器版本的 windres.exe工具生成到下面这个路径
H:\OpenCV454\opencv\newbuild\modules\world\CMakeFiles\opencv_world.dir
windres.exe工具路径,根据自己编译的版本路径来,我下面这个是32位的路径
H:\Qt5.14.2\Tools\mingw730_32\bin\windres.exe
使用命令(还是要强调路径,路径,路径,根据自己的路径修改下面的命令)
H:\Qt5.14.2\Tools\mingw730_32\bin\windres.exe .\vs_version.rc -O coff .\vs_version.rc.obj
生成完成后
再在刚才的终端 执行mingw32-make.exe命令接着编译
一般来说就没有问题了
5.生成库
接着在终端中执行
mingw32-make.exe install
等待执行完成完事了;
生成的库和头在下面路径
H:\OpenCV454\opencv\newbuild\install
然后就可以在qt中使用了
64位编译同上
6.资源下载
总结
主要主要环境变量,和路径问题,大部分错误网上都有解决方法,
以上就是全部编译过程,小白写的不好的地方欢迎大家指正,或者你有什么要补充的也欢迎在下面留言补充;