编译环境:
系统:Windows7企业版
cmake版本:3.22.1
Mingw版本:x86_64-5.4.0-release-posix-sjlj-rt_v5-rev0
opencv版本:3.4.6
1. 下载
cmake:下载地址
Ming:下载地址
opencv:下载地址
2. 安装
将下载的cmake解压。
将下载的mingw解压,并且为其目录下的bin目录增加环境变量

将下载的opencv解压。并且进入其目录。新建一个文件夹名为build_mingw

3. 编译
进入cmake文件夹,进入bin目录,点击cmake-gui.exe打开cmake程序
在where is the source code后面填入opencv的主目录opencv-3.4.6
在where to build the binaries后面填入之前建立的build_mingw文件夹

点击左下角configure,弹出对话框,选择MinGw Makefiles和Use default native compilers,点击Finish

开始配置,过程需要确保网络连接,因为配置过程会下载缺失的组件,我勾选了ffmpeg组件

配置完成

在Search搜索框里面输入ENABLE_CXX11,找到ENABLE_CXX11项,勾选,启用c++11新特性,否则之后编译会出错

清空搜索框,输入WITH_OPENCL_D3D11_NV,找到WITH_OPENCL_D3D11_NV项,如果不需要d3d功能,将其取消勾选,否则编译时有可能出错

其他选项说明:
BUILD_OPENCV_WORLD:开启后会包含opencv_world模块,将各个模块编译成一个opencv_worldxxx.lib文件,而不是十几个lib库文件。方便之后的部署和使用
CMAKE_BUILD_TYPE:指定编译的类型为Debug还是Release
BUILD_JAVA:开启java支持
之后重新点击configure,直到红颜色消失

点击generate产生makefile文件

之后到opencv文件夹中之前建立的build_mingw文件夹。发现已经生成了用于编译的一大堆文件

在空白处按shift+右键,点击在此处打开命令窗口打开cmd,输入make+回车进行编译,之后等待进度到100编译成功。不要使用-j选项进行多线程编译,因为容易编译出错

编译成功

继续输入make install+回车进行安装

安装完成后发现build_mingw目录下多了一个install目录

4. 测试
新建一个test.cpp文件
#include<opencv2/opencv.hpp>
int main(){
cv::Mat src=cv::imread("D:/3.4.6/BingWallpaper.jpg");
cv::imshow("image",src);
cv::waitKey(0);
return 0;
}
用Mingw进行编译
g++ test.cpp -o test.exe -ID:\3.4.6\build_mingw\install\include -ID:\3.4.6\build_mingw\install\include\opencv -ID:\3.4.6\build_mingw\install\include\opencv2 -LD:\3.4.6\build_mingw\install\x64\mingw\lib -lopencv_core346 -lopencv_imgcodecs346 -lopencv_imgproc346 -lopencv_calib3d346 -lopencv_highgui346
-I后面跟的是头文件目录,-L后面是库文件目录,-l后面是要链接的库
之后运行
会有报错提示

原因是缺少opencv的动态链接库,此时我们需要将build_mingw\install\x64\mingw\bin目录加入系统环境变量就可以了

之后重新运行程序
