上一篇教程: 使用 Eclipse(插件 CDT)来使用 OpenCV
下一篇教程: 如何在“Microsoft Visual Studio”内部用 OpenCV 构建应用程序
原创作者 贝尔纳特·加伯
兼容性 OpenCV >= 3.0
警告 本教程可能包含已过时信息。
此处的描述已在 Windows 7 SP1 上进行测试。尽管如此,它还应该适用于任何其他相对较新的 Windows 操作系统版本。如果你在按照以下步骤操作后遇到错误,请随时通过我们的 OpenCV 问答论坛 联系我们。我们会尽力帮助你。
注意 若要使用 OpenCV 库,你有两个选择:使用预构建的库安装 或 从源文件创建自己的库来安装 。前者更容易完成,但只有在使用最新的 Microsoft Visual Studio IDE 编写代码且并未利用我们集成到库中的最先进技术时才有效。.. _Windows_Install_Prebuild
使用预构建的库进行安装
启动你选择的网络浏览器,访问我们的 Sourceforge 页面 。
选择你要使用的构建并下载它。
确保你具有管理员权限。解压自解压存档。
你可以按如下所示在所选路径处检查安装情况。
要完成安装,请转到 设置 OpenCV 环境变量并将其添加到系统路径 部分。
使用 git-bash(版本>=2.14.1)和 cmake(版本 >=3.9.1)进行安装
你必须下载 cmake(版本 >=3.9.1) 并安装它。安装过程中,你必须将 cmake 添加到 PATH 变量中
你必须安装 git-bash(版本>=2.14.1) 。安装过程中不要将 git 添加到 PATH 变量中
运行 git-bash。你会看到一个命令行窗口。假设你要在 c:/lib 中构建 opencv 和 opencv_contrib
在 git 命令行中输入以下命令(如果文件夹不存在)
在 c:/lib 中以 installOCV.sh 的名称保存此脚本#!/bin/bash -e
myRepo=$(pwd)
CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 16 2019"
#CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 15 2017 Win64"
#CMAKE_GENERATOR_OPTIONS=(-G"Visual Studio 16 2019" -A x64) # 需要 CMake 3.14+
if [ ! -d "$myRepo/opencv" ]; then
echo "克隆 opencv"
git clone https://github.com/opencv/opencv.git
else
cd opencv
git pull --rebase
cd ..
fi
if [ ! -d "$myRepo/opencv_contrib" ]; then
echo "克隆 opencv_contrib"
git clone https://github.com/opencv/opencv_contrib.git
else
cd opencv_contrib
git pull --rebase
cd ..
fi
RepoSource=opencv
mkdir -p build_opencv
pushd build_opencv
CMAKE_OPTIONS=(-DBUILD_PERF_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=OFF -DBUILD_DOCS:BOOL=OFF -DWITH_CUDA:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DINSTALL_CREATE_DISTRIB=ON)
set -x
cmake "${CMAKE_GENERATOR_OPTIONS[@]}" "${CMAKE_OPTIONS[@]}" -DOPENCV_EXTRA_MODULES_PATH="$myRepo"/opencv_contrib/modules -DCMAKE_INSTALL_PREFIX="$myRepo/install/$RepoSource" "$myRepo/$RepoSource"
echo "************************* $Source_DIR -->debug"
cmake --build . --config debug
echo "************************* $Source_DIR -->release"
cmake --build . --config release
cmake --build . --target install --config release
cmake --build . --target install --config debug
popd
在此脚本中,我认为你在 64 位的 VS 2015 中CMAKE_GENERATOR_OPTIONS=-G"Visual Studio 14 2015 Win64"
并且 opencv 将安装在 c:/lib/install/opencv 中-DCMAKE_INSTALL_PREFIX="$myRepo/install/$RepoSource"
并且没有性能测试、没有测试、没有文档、没有 CUDA 和没有示例CMAKE_OPTIONS=(-DBUILD_PERF_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=OFF -DBUILD_DOCS:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF)
在 git 命令行中,输入以下命令
喝一两杯咖啡... opencv 已经准备好了:仅此而已!
下次运行此脚本时,opencv 和 opencv_contrib 将被更新并重建
利用源文件创建自己的库进行安装
你也可以在以下视频中找到本教程的内容:第 1 部分 和 第 2 部分 ,YouTube 上进行托管。
VIDEO
VIDEO
警告
上述这些视频已经过时,并且包含不准确的信息。请注意,这些视频中描述的解决方案不再受支持,甚至可能破坏你的安装。
如果要构建自己的库,可以从我们的 Git 仓库 获取源文件。
从头构建 OpenCV 库需要事先安装一些工具
首选(IDE),或只用一个 CC++ 编译器,该编译器实际上会生成二进制文件。我们在此将使用 Microsoft Visual Studio 。但是,你可以使用任何其他具备有效 CC++ 编译器的 IDE。
CMake ,这是一款不错的工具,能够用 OpenCV 源文件生成项目文件(适用于你的所选 IDE)。它还允许轻松地配置 OpenCV 构建文件,以便生成完全符合你的需求的二进制文件。
使用 Git 来获取 OpenCV 源文件。一个好工具是 TortoiseGit 。或者,您也可以从我们的 Sourceforge 页面 下载归档的源文件版本
OpenCV 可能有多个版本。有一个“core”部分,它能够独立工作。但是,有一些第三方制作的工具和库提供 OpenCV 可以利用的服务。这些将以多种方式提升其功能。为了使用其中任何一个,您需要在系统中将其下载并安装。
Python 库 是必需的,以构建 OpenCV 的Python 接口 。目前使用版本:2.7.{x}
。如果您想要构建OpenCV 文档 ,这也是必需的。
Numpy 是一个适用于 Python 的科学计算包。Python 接口 所需。
Intel Threading Building Blocks (TBB ) 在 OpenCV 中用于并行代码片段。使用此功能可确保 OpenCV 库将利用您系统 CPU 中的所有内核。
Intel Integrated Performance Primitives (IPP ) 可用于提高 OpenCV 库的颜色转换、Haar 训练和 DFT 功能的性能。请小心,因为这不是免费服务。
通过使用 Qt 框架 ,OpenCV 提供了一个比默认功能更美观实用的图形用户界面。为了快速概述此功能提供的优势,请参阅highgui 模块文档,在Qt 新函数 部分下。需要版本 4.6 或更高级别的框架。
Eigen 是一个适用于线性代数的 C++ 模板库。
最新的 CUDA 工具包 将允许您使用 GPU 中的强大能力。这将大幅度提升某些算法(例如 HOG 描述符)的性能。让越来越多的算法能够在 GPU 上运行是 OpenCV 团队的持续努力。
OpenEXR 源文件是必需的,以使库能够与这种高动态范围 (HDR) 图像文件格式配合使用。
OpenNI 框架包含一系列开放源 API,提供对设备的支持,方法是使用诸如语音命令识别、手势和身体动作跟踪之类的自然交互。可以 在此处 找到预构建的二进制文件。OpenNI 和 OpenNI2 的源代码也可以在 Github 上找到。
Doxygen 是一个文档生成器并且是创建一个OpenCV 文档 的工具。
现在我们将描述进行完全构建(使用所有上述框架、工具和库)的步骤。如果您不需要应对某些措施的支持,您可以直接跳过此部分。
构建库
确保您有一个带有有效编译器的 IDE。对于 Microsoft Visual Studio,只需安装它,确保它启动。
安装 CMake 。直接遵循向导,无需将它添加到路径中。默认安装选项即可。
从 官方网址 下载并安装最新的 Msysgit 版本。还存在便携版本,您只需要解压此版本就能获取 Git 的控制台版本。假设这一版本对于我们大家来说已经足够了。
安装 TortoiseGit 。根据您使用的操作系统类型,选择 32 或 64 位版本。在安装期间,找到您的 Msysgit(如果它没有自动执行此操作)。遵循向导 – 大多数情况下,默认选项均可。
在您的文件系统中选择一个目录,您将向此目录下载 OpenCV 库。我建议您创建一个路径短并且没有特殊字符的新目录,例如 D:/OpenCV
。对于本教程,我建议您这么做。如果您使用自己的路径并知道自己在做什么,那就可以了。
将存储库克隆到选定的目录。在单击克隆 按钮之后,将会出现一个窗口,您可以在此窗口中选择希望从哪个存储库下载源文件 (https://github.com/opencv/opencv.git )以及下载到哪个目录(D:/OpenCV
)。
点击确定按钮并耐心等待,因为下载存储库的过程相当繁琐。这将花费一些时间,具体取决于您的网络连接。
在本部分中,我将介绍如何安装第三方库。
下载 Python 库 并使用默认选项进行安装。您将需要几个其他 Python 扩展。幸运的是,一个名为 Setuptools 的优秀工具可以自动化所有这些操作。再次下载并安装。
最简单安装 Numpy 的方法是从 sourceforge 页面 下载其二进制文件。确保正确下载并安装与您的 Python 版本(即对于版本 2.7
)对应的二进制文件。
关于英特尔线程构建模块 (TBB ) ,下载源文件并将其提取到系统上的一个目录内。例如,可以是 D:/OpenCV/dep
。如果想要安装英特尔集成性能原语 (IPP ) ,方法是一样的。建议使用7-Zip 应用程序来解压存档。
如果是Eigen 库,同样是下载并将其提取到 D:/OpenCV/dep
目录中。
与OpenEXR 的情况相同。
关于OpenNI 框架 ,需要同时安装开发版本 和PrimeSensor 模块 。
关于 CUDA,同样需要两个模块:最新的CUDA Toolkit 和CUDA Tools SDK 。下载并安装这两个模块,根据操作系统使用 32 或 64 位设置并选择完整 选项。
如果是 Qt 框架,需要自己构建二进制文件(除非使用带有 32 位编译器的 Microsoft Visual Studio 2008)。为此,请访问Qt Downloads 页面。下载源文件(不是安装程序!)
将其提取到名称简洁的目录中,例如 D:/OpenCV/dep/qt/
。然后需要构建它。通过使用开始菜单搜索(或导航至开始菜单的所有程序 –> Microsoft Visual Studio 2010 –> Visual Studio 工具 –> Visual Studio 命令提示符 (2010))启动Visual Studio 命令 提示符 (2010 )。
现在,通过使用这个控制台窗口导航到已解压缩的文件夹并进入其中。应该看到包含 Install 、Make 等文件的文件夹。使用 dir 命令列出当前目录内的文件。进入该目录后,输入以下命令
configure.exe -release -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools
-no-qt3support -no-multimedia -no-ltcg
完成此操作大约需要 10-20 分钟。然后输入下一条命令,它将花费更长的时间(甚至可能需要一个多小时)
在此之后,在 Windows 7 中使用以下命令设置 Qt 环境变量
setx -m QTDIR D:/OpenCV/dep/qt/qt-everywhere-opensource-src-4.7.3
此外,使用PathEditor 将构建的二进制文件路径添加到系统路径中。在本例中,它是 D:/OpenCV/dep/qt/qt-everywhere-opensource-src-4.7.3/bin
。
注意 如果你计划进行 Qt 应用程序开发,现在也可以安装Qt Visual Studio Add-in 。这样,你就可以在不使用Qt Creator 的情况下制作和构建 Qt 应用程序。所有内容都很好地集成到了 Visual Studio 中。
现在,启动CMake (cmake-gui) 。你可以在开始菜单搜索中再次输入它,或者从所有程序 -> CMake 2.8 -> CMake (cmake-gui) 中获取它。首先,选择 OpenCV 库源文件的目录 (1)。然后,指定一个目录,其中你将为 OpenCV 构建二进制文件 (2)。
按“配置”按钮指定你希望使用的编译器(和IDE )。请注意,如果你可以选择不同的编译器来制作 64 位或 32 位库。在应用程序开发中,选择一个你使用的编译器。
CMake 将启动,并根据你的系统变量自动查找尽可能多的包。你可以在 WITH -> WITH_X 菜单点(其中X 是包缩写)中修改要用于构建的包。以下是你可以打开或关闭的当前包的列表
选择要使用的所有包,然后再次按配置 按钮。为了更轻松地了解构建选项,确保在二进制目录选择中启用了分组 选项。对于某些包,CMake 可能无法找到所有必需的文件或目录。在这种情况下,CMake 将在其输出窗口(位于 GUI 底部)中抛出错误,并将字段值设置为 未找到常量。例如
对于这些,你需要手动设置查询的目录或文件路径。之后再次按配置 按钮,查看你输入的值是否被接受。一直进行此操作,直到所有条目都良好,并且你无法在 GUI 的字段/值或输出部分中看到错误。现在,我想强调一个你肯定会喜欢的选项:ENABLE -> ENABLE_SOLUTION_FOLDERS。OpenCV 会创建许多项目,启用此选项将确保它们在解决方案资源管理器 中的目录中分类。如果问我,这是一个必须具备的功能。
此外,你需要选择要构建的 OpenCV 部分。
BUILD_DOCS -> 它创建两个用于构建 OpenCV 文档的项目(将有一个单独的项目用于构建 HTML 和 PDF 文件)。请注意,这些不是与解决方案一起构建的。你需要对此类项目发出一条明确的构建项目命令才能执行此操作。
BUILD_EXAMPLES -> OpenCV 提供了许多示例应用程序,从中你可以了解大部分库的能力。这还将非常方便地尝试 OpenCV 是否在你计算机上完全可用。
BUILD_PACKAGE -> 在 2.3 版本之前,使用此选项,您可以构建一个用于构建 OpenCV 安装程序的项目。使用此选项,您可以在其他系统上轻松安装您的 OpenCV 版本。对于最新的 OpenCV 源文件,它将生成一个新项目,只需使用 OpenCV 源创建一个 zip 存档即可。
BUILD_SHARED_LIBS -> 使用此选项,您可以控制是否构建 DLL 文件(开启时)或静态库文件(*.lib)。
BUILD_TESTS -> OpenCV 的每个模块都分配了一个测试项目。构建这些测试项目也是一种不错的方式,可以用来尝试这些模块是否也如您预期的那样在您的系统上工作。
BUILD_PERF_TESTS -> 还有针对许多 OpenCV 函数的性能测试。如果您关心性能,请构建并运行这些测试。
BUILD_opencv_python -> 不言自明。创建让您能够从 Python 语言使用 OpenCV 的二进制文件。
BUILD_opencv_world -> 生成一个包含所有模块的单个“opencv_world”二进制文件(共享或静态库,取决于 BUILD_SHARED_LIBS ),而不是为每个模块生成一个单独的二进制文件的集合。
再次按下 配置 按钮并确保没有错误报告。如果是这种情况,您可以通过按下 生成 按钮指示 CMake 创建项目文件。转到构建目录并打开已创建的 OpenCV 解决方案。取决于您选择上述哪些选项,此解决方案可能包含大量项目,因此在 IDE 启动时要对其保持容忍。现在,您需要构建 Release 和 Debug 二进制文件。在为其中一个构建后,使用 IDE 上的下拉菜单切换到另一个。
最后,您可以在 bin 目录中观察已构建的二进制文件
对于文档,您需要显式向 doxygen 项目发布构建命令以获取 HTML 文档。它将调用 Doxygen 来完成所有繁重的工作。您可以在 build/doc/doxygen/html
中找到生成的文档。
要将您将在自己的项目中使用的头文件和二进制文件收集到一个单独的目录中(类似于预构建二进制文件的发行方式),您需要显式构建 安装 项目。
这将在 Build 中创建一个 Install 目录,将所有已构建的二进制文件收集到单个位置。仅在您构建了 Release 和 Debug 版本后才使用此选项。
若要测试您的构建,只需进入 Build/bin/Debug
或 Build/bin/Release
目录并启动几个应用程序,如 contours.exe 。如果它们可以运行,则说明您已完成。否则,肯定有一些事情出了严重的问题。在这种情况下,您应该在我们的 问答论坛 联系我们。如果一切正常,则 contours.exe 输出应类似于以下图像(如果在构建时启用了 Qt 支持)
注意 如果您使用 GPU 模块(CUDA 库),请确保您还升级至最新 GPU 驱动程序。包含无效的 nvcuda.dll 条目(或找不到此条目的)的错误消息大多是由旧显卡驱动程序导致的。要对 GPU(如果已编译)进行测试,请运行performance_gpu.exe 示例应用程序。
设置 OpenCV 环境变量并将其添加到系统路径中
首先,我们设置一个环境变量,以便简化我们的工作。这将包含我们项目中使用的 OpenCV 库的构建目录。启动一个命令窗口,然后输入
setx OpenCV_DIR D:\OpenCV\build\x64\vc14(建议用于 Visual Studio 2015 - 64 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x86\vc14 (建议用于 Visual Studio 2015 - 32 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x64\vc15 (建议用于 Visual Studio 2017 - 64 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x86\vc15(建议用于 Visual Studio 2017 - 32 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x64\vc16(建议用于 Visual Studio 2019 - 64 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x86\vc16(建议用于 Visual Studio 2019 - 32 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x64\vc17(建议用于 Visual Studio 2022 - 64 位 Windows)
setx OpenCV_DIR D:\OpenCV\build\x86\vc17(建议用于 Visual Studio 2022 - 32 位 Windows)
此处,目录为 OpenCV 二进制文件的位置(提取 或构建 )。您可以拥有不同的平台(例如 x64 而不是 x86)或编译器类型,因此请代入相应的值。在该目录内部,您应有两个名为 lib 和 bin 的文件夹。
如果您构建的是静态库,则您已完成。否则,您需要将 bin 文件夹路径添加到系统路径。这是因为您将以 "动态链接库"(也称为 DLL )的形式使用 OpenCV 库。在该目录内部存储了 OpenCV 库包含的所有算法和信息。操作系统仅在需要时才在运行时加载它们。但是,要做到这一点,操作系统需要知道它们在哪里。系统的 PATH 包含了可以找到 DLL 的文件夹列表。将 OpenCV 库路径添加到该路径,这样如果操作系统需要 OpenCV 二进制文件,它将知道在哪里找到。否则,您需要将已使用的 DLL 复制到应用程序的可执行文件(exe )旁边,以便操作系统可以找到它,如果您使用多个项目,这是非常不愉快的。要执行此操作,请再次启动 PathEditor ,然后添加以下新条目(在应用程序中右键单击以调出菜单)
将其保存到注册表,这样就完成了。如果您改变构建目录的位置,或想要尝试使用不同的构建对您的应用程序进行开发,那么您只需通过命令窗口内的setx 命令来更新OPENCV_DIR变量。
您现在可以继续阅读如何在 Microsoft Visual Studio 中使用 OpenCV 构建应用程序 部分中的教程。您将在那里了解如何在 Microsoft Visual Studio IDE 的帮助下,在您自己的项目中使用 OpenCV 库。