真的爆了

事情最开始是小学期希望把 Python 的 Aimbot 移植到 C++ 里面,于是就要用到 OpenCV 。当时配了半天都只停在 Cmake 的阶段,最后放弃了,,,

而最近希望用C++做一个小应用,需要使用OpenCV+Freetype的组合,又不得不开始配置 OpenCV,,,

期间尝试了很多方法,包括下载源码编译,下载已编译的文件,使用 vcpkg 等等。。。最后还是不得不使用 vcpkg,,,

这篇文章我先介绍一个失败的方法,再介绍最终解决方案

准备工作

组件 说明
系统 Windows 11
编译器 Visual Studio(安装时记得勾选 C++ 桌面开发 工作负载)
IDE CLion(我用的 IDE)
包管理 vcpkg

注:即使你用 CLion,也必须装 VS —— 因为 Windows 下 C++ 编译链(MSVC)依赖 VS 的工具链,CLion 只是调用它。

尝试一:源码编译

额外准备

OpenCV相关资源都可以在Github找到,下载并解压,如图所示:
1

CMake 配置

安装并打开CMake(过程略),此时需要选择 source code 与 build binary 的目录,我按照如下配置

2

首次 configure 会弹出 generator 选择窗口,选你安装的 VS 版本(如 Visual Studio 17 2022),平台选 x64用 default native compilers

3

点击finish 开始配置。此处有一个坑点:CMake会下载一些包,但由于国内网络问题很可能会失败,比如翻日志会出现这些提示:

1
2
3
4
5
6
7
8
IPPICV: Downloading ippicv_2022.1.0_win_intel64_20250130_general.zip from https://raw.githubusercontent.com/opencv/opencv_3rdparty/767426b2a40a011eb2fa7f44c677c13e60e205ad/ippicv/ippicv_2022.1.0_win_intel64_20250130_general.zip
Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:251 (message):
IPPICV: Download failed: 56;"Failure when receiving data from the peer"

For details please refer to the download log file:

D:/Code/OpenCV/opencv-build/CMakeDownloadLog.txt

那就只能手动下载失败的 zip 包(用代理 or 手动拼 URL 丢进浏览器),放到对应临时目录,比如:

D:\Code\OpenCV\opencv-build\3rdparty\ippicv\ippicv_2022.1.0_win_intel64_20250130_general.zip

然后重新点 Configure,它会跳过下载直接用本地文件。

配置结束后,需要修改一些键值。

找到 OPENCV_EXTRE_MODULES_PATH ,将目录改为类似 D:\Code\OpenCV\opencv_contrib-4.x\modules

4

由于我需要freetype,于是还勾选了 WITH_FREETYPE。此外,还建议再勾选 BUILD_opencv_world ,然后点击configure,generate。

编译集成

  • 用 VS 打开 OpenCV.slnRelease + x64 模式编译 INSTALL 项目(它会把头文件、lib、dll 拷到 install 目录)
  • 然后在自己项目的 CMakeLists.txt 里设:
    1
    2
    3
    set(OpenCV_DIR "D:/Code/OpenCV/opencv-build/install")
    find_package(OpenCV REQUIRED)
    target_link_libraries(your_target ${OpenCV_LIBS})

理论上之后只要在项目的CMakeList设置好OpenCV_DIR就可以了,反正我是没成功。查了半天资料发现是因为要想使用Freetype,还需要自己再编译Freetype和Harfbuzz两个库,我是想不折腾了,于是只能用更方便的vcpkg。

尝试二:vcpkg

安装 vcpkg

  1. 在合适位置(如 D:\Code\vcpkg)打开 PowerShell:

    1
    2
    3
    git clone https://github.com/microsoft/vcpkg
    cd vcpkg
    .\bootstrap-vcpkg.bat

    注意:不要想着避开 git clone 的步骤!!

  2. 集成到 Visual Studio(重要!)

    1
    .\vcpkg integrate install

    这步会让 VS 自动识别 vcpkg 安装的库,无需手动设 include/lib 路径!

  3. 环境变量设置:

    在 PATH 中添加 vcpkg 的目录,使得能够在 console 直接运行 vcpkg 命令。

安装 OpenCV + FreeType

一条命令解决:

1
2
# 安装 opencv4 + 所有默认 contrib 模块(含 freetype)
vcpkg install opencv[contrib]:x64-windows

注意:vcpkg文件夹会变得非常大!务必预留足够空间。

在 CLion 中配置 vcpkg

首先需要调出 vcpkg 窗口,可以在 视图->工具窗口->vcpkg 找到。

注意:选择 vcpkg 经典, 不要切到清单模式

接下来添加 vcpkg 即可,并找到 Open CV 安装即可。

注意:opencv, opencv2, opencv4 等都尽量安装。

5

然后在项目的 CMakeLists.txt 中写下这些内容(仅供参考):

1
2
3
4
5
6
7
8
9
cmake_minimum_required(VERSION 3.20)
project(你的项目名称)

# 启用 vcpkg 工具链(关键!让 CMake 知道去哪找库)
set(CMAKE_TOOLCHAIN_FILE "D:/Code/vcpkg/scripts/buildsystems/vcpkg.cmake")

find_package(OpenCV REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

编译运行

CLion:Reload CMake → Build

以下是一个示例程序:

1
2
3
4
#include <opencv2/freetype.hpp>
auto ft2 = cv::freetype::createFreeType2();
ft2->loadFontData("simhei.ttf", 0);
ft2->putText(img, "你好 OpenCV", cv::Point(50,50), 32, cv::Scalar(255,0,0));