在Windows10中通过命令行,使用g++和Cmake从源代码构建Opencv,并进行测试

在Windows10中通过命令行,使用g++和Cmake从源代码构建Opencv,并进行简单测试(2026.1.28)

1.前期准备

1.1安装C++和Cmake工具

本环境使用MSYS2管理安装ucrt64套件,并将(目录请根据具体安装位置灵活更改)

D:\Mysys2\ucrt64\bin

目录加入windows环境变量。

在cmd中输入:

g++ -v

显示包含且不限于以下版本信息

gcc version 15.2.0 (Rev8, Built by MSYS2 project)

此时C++环境安装完毕,具体细节请参考网络上广泛的C++环境安装教程。

随后下载安装Cmake工具,并将(目录请根据具体安装位置灵活更改)

D:\cmake-4.2.2-windows-x86_64\bin

目录加入windows环境变量。

在cmd中输入:

cmake

显示以下信息

Usage
cmake [options] <path-to-source>
cmake [options] <path-to-existing-build>
cmake [options] -S <path-to-source> -B <path-to-build>
Specify a source directory to (re-)generate a build system for it in the
current working directory. Specify an existing build directory to
re-generate its build system.
Run 'cmake --help' for more information.

此时Cmake工具安装完毕,具体细节请参考网络上安装教程。

1.2下载opencv源代码

这里以opencv-4.12.0为例,下载源代码得到文件

opencv-4.12.0.zip

并将其解压到D:\Opencv_4.12.0\Sourcecode目录中备用,解压结果如图:

image-20260128013230771

1.3配置Cmake准备编译

首先打开Cmake软件D:\cmake-4.2.2-windows-x86_64\bin\cmake-gui.exe

image-20260128013704336

按照图中顺序,依次配置:

1.Opencv源代码位置:D:\Opencv\Sourcecode

2.用于存放构建后的Opencv库的位置,此处新建一个空文件夹并选取:D:\Opencv\Build

3.首次使用需要告诉Cmake使用什么编译器,本文使用的是Mysys2管理的ucrt64工具,其本质上是MinGW工具链的一种“发行版”,因此选取MinGW Makefiles

image-20260128014157446

通常正确配置windows系统变量后,使用第一项Use default native compilers即可自动识别相应工具。

此处附带使用第二项Specify native compilers手动指定编译器的示例。

image-20260128014516251

点击Finish,Cmake将会进行首次自动配置。

image-20260128014712564

在首次自动配置时,会针对我们目标构建的Opencv库下载相应的支持库,由于下载源是Github,可能会出现网络不畅通的问题,请做好加速工作。也可以手动在其他源下载这些文件,然后手动替换Cmake的下载缓存,并重复上面的配置工作。具体替换缓存的方法请参照网络。

image-20260128014858347

自动配置完成后,如下图:

image-20260128015234656

本文只是进行简单的Opencv编译并使用,因此只修改以下设定:

1.BUILD_opencv_world修改为。将会只构建产生一个libopencv_world4120.dll,调用时会很方便。若需要进阶的自定义修改Opencv,请根据需要调整。

image-20260128015354685

2.CMAKE_INSTALL_PREFIX选项中的目录是最终构建的Opencv存放的目录,请根据需要设定并记住位置(编译构建完成以后也可以手动更改目录,但现在请暂时记住这个目录),本文使用默认位置D:/Opencv/Build/install

image-20260128020035135

3.本文目标构建Opencv动态链接库,检查BUILD_SHARED_LIBS,这一项默认应该是勾选上的。

image-20260128021615918

至此,Cmake配置准备完成。

1.4使用Cmake生成makefile文件

image-20260128022016269

1.首先点击Configure,让Cmake保存更新我们前面的修改。

image-20260128022118513

2.点击Generate,生成makefile文件。

image-20260128022200254

至此,Cmake已经完成了任务,可以关闭。

1.5开始编译Opencv

1.以管理员身份运行cmd,并通过:

cd /d D:\Opencv\Build

进入先前Cmake中选择的Build目录。

image-20260128022519308

2.cmd输入:

mingw32-make -j8

开始进行编译,其中"-j8"指定使用8个cpu线程,根据自己的cpu进行修改。用时30分钟左右。

image-20260128022744984

3.编译完成后,cmd输入:

mingw32-make install

image-20260128025840047

这个指令将已经编译好的Opencv库放入先前Cmake中CMAKE_INSTALL_PREFIX选项指定的D:/Opencv/Build/install文件夹中。

至此,Opencv编译完成,当前cmd窗口可以关闭。

编译所得库在D:/Opencv/Build/install文件夹中,其余部分均可删除(为了方便后续根据自己的需要重新编译Opencv,可酌情保留)。

1.6使用简单代码测试

1.将D:\Opencv\Build\install\x64\mingw\bin路径加入Windows环境变量

2.使用c++编写以下测试代码:

#include<iostream>
#include<opencv2/opencv.hpp>

int main(int argc, char const *argv[])
{
    cv::Mat img = cv::imread("./test.png");
    if(img.empty())
        std::cout << "image is empty or the path is invalid!" << std::endl;
    cv::imshow("Origin", img);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}

并在相同路径下准备一张png格式的图片,命名为

test.png

image-20260128030334578

3.以管理员启动cmd,使用cd指令进入测试代码的目录。

cd /d D:/Opencv_hello

4.使用cmd命令行调用g++编译器:

g++ -std=c++11 Opencv_hello.cpp -o Opencv_hello.exe -I D:\Opencv\Build\install\x64\mingw\bin -L D:\Opencv\Build\install\x64\mingw\lib  -llibopencv_world4120

其中:

-I D:\Opencv\Build\install\x64\mingw\bin

-I(大写 i ) 指定头文件搜索目录

-L D:\Opencv\Build\install\x64\mingw\lib  -llibopencv_world4120

-L 指定库文件搜索目录,-l(小写L)指定要链接的库。

并请尤其注意-llibopencv_world4120,实际上是" -l " + " libopencv_world4120 ",缺一不可。

image-20260128032416189

image-20260128031147007

执行结束后,运行测试代码目录中生成的Opencv_hello.exe

image-20260128031242709

image-20260128031344077

成功显示test.png

至此,Opencv编译和简单测试完成!

附:若要使用vscode进行编译运行,请在对应项目的task.json中做如下修改:

image-20260128033227515

注:这些代码事实上就是前文中在cmd中输入的内容

g++ -std=c++11 Opencv_hello.cpp -o Opencv_hello.exe -I D:\Opencv\Build\install\x64\mingw\bin -L D:\Opencv\Build\install\x64\mingw\lib  -llibopencv_world4120
posted @ 2026-01-28 03:58  ASDF12301  阅读(2)  评论(0)    收藏  举报