在windows上编译并使用opencv的正确姿势

本文简单介绍了如何在windows上用mingw编译opencv!

并在cmake中使用自己编译好的opencv!

编译OpenCV

编译前的准备

如果你想使用MSVC进行编译的话,你需要安装Visual Studio。由于本文中使用的编译器为mingw,这里暂时不介绍msvc。

安装 mingw

前往https://github.com/brechtsanders/winlibs_mingw/releases

下载完成后,解压mingw到一个文件夹下。

最后,把mingw的bin文件夹的路径添加的系统的PATH环境变量中即可

安装 cmake

前往https://cmake.org/download/,下载对应系统的安装包,然后安装即可。

验证安装完成

确认工具链都以及安装完成且已经在path里面惹

ss

下载OpenCV源码以及OpenCV Module源码

前往https://github.com/opencv/opencv/tags 下载指定版本的源码,或者直接clone

前往https://github.com/opencv/opencv_contrib/tags 下载OpenCV module的源码,或者直接clone

下载完成后解压到一个位置,比如D:/repo/opencvD:/repo/opencv_contrib

开始编译

在开始中搜索 CMake (cmake-gui) 并启动

Where is the source code 中填入 D:/repo/opencv/sources (改成解压的位置)

Where to build the binaries 中填入 D:/repo/opencv/build (或者任意一个你想要的文件夹)

a

点击 Configure 按钮,在跳出的界面中选择 "Mingw Makefiles"

a

完成之后,点finish等待cmake configure完成。

在完成configure之后,需要修改一些选项,删除一些不要的module,添加一些需要的module,以及设置安装路径

在搜索中搜索选项的名字,并填上相对应的值

a

  • BUILD_PROTOBUF – 取消勾选
  • WITH_PROTOBUF – 取消勾选
  • BUILD_TESTS – 取消勾选
  • WITH_OPENEXR – 取消勾选
  • BUILD_OPENEXR – 取消勾选
  • OPENCV_ENABLE_ALLOCATOR_STATS – 取消勾选
  • CMAKE_BUILD_TYPE – RELEASE
  • CMAKE_INSTALL_PREFIX – 填上安装路径比如D:/repo/opencv/install
  • OPENCV_EXTRA_MODULES_PATH - 填上opencv_contrib module的路径,比如D:/repo/opencv_contrib/modules

完成选项设置后,摁Generate按钮生成makefile

等待makefile生成完成后。cmd进入你设置的build文件夹 (D:/repo/opencv/build)

然后使用make命令开始编译

1
mingw32-make.exe

整个编译过程可能持续数小时(到几天)

完成make后,使用make install来安装opencv到你前面设置的路径

1
mingw32-make.exe install

最后把opencv install完成之后生成的bin文件夹加入系统的path即可。

比如 D:/repo/opencv/install/x64/mingw/bin

食用OpenCV

在cmake中添加如下文本即可

OpenCV_DIR 就是上文里自己设置的安装路径

你可以在cmakelist里手动设置OpenCV_DIR的位置,也可以用cmake-gui,然后选择安装路径。

1
2
3
4
5
6
7
8
# OpenCV
# set(OpenCV_DIR "D:/repo/opencv/install") # manually set opencv dir
find_package(OpenCV REQUIRED)
if (NOT OpenCV_FOUND)
message(FATAL_ERROR "OpenCV is required")
endif ()
include_directories( ${OpenCV_INCLUDE_DIRS} )
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})

Notes

  • OpenCV cuda在windows下无法使用mingw进行编译

Reference

  1. https://support.xilinx.com/s/article/000035890