我本想直接下载opencv使用,奈何编译太过麻烦,以及CMake总是会到vcpkg中找opencv,本来我没在vcpkg下opencv主要是当时网络环境差下不下来,那现在没办法,只好顶着网络问题搞定它。

1.安装

安装vcpkg和CMake不再赘述,方法有很多人写了,主要的一点事要注意CMake的版本与你安装的opencv版本是否对应。

然后就是按部就班的安装opencv

# 1. 卸载当前的 OpenCV(如果已设置)
# 2. 使用 vcpkg 安装对应版本的 OpenCV

# 进入 vcpkg 目录
cd D:\ProjectC\Dev\tools\vcpkg

# 安装 OpenCV for VS2019 x86
.\vcpkg install opencv4:x86-windows

# 或者安装 x64 版本(如果需要)
.\vcpkg install opencv4:x64-windows

# 安装完成后,集成到系统
.\vcpkg integrate install

2.验证配置

创建一个简单的验证脚本 test_opencv.cmake

# test_opencv.cmake
cmake_minimum_required(VERSION 3.15)

# 测试不同设置
message("Testing OpenCV configuration...")

# 测试1: 使用 OpenCV_ROOT
set(OpenCV_ROOT "D:/ProjectC/Dev/tools/vcpkg/installed/x86-windows/share/opencv4")
find_package(OpenCV QUIET)

if(OpenCV_FOUND)
    message("SUCCESS: Found OpenCV via OpenCV_ROOT")
    message("  Version: ${OpenCV_VERSION}")
else()
    message("FAILED: OpenCV not found via OpenCV_ROOT")
endif()

# 测试2: 使用 find_package 默认查找
unset(OpenCV_ROOT CACHE)
unset(OpenCV_DIR CACHE)
find_package(OpenCV QUIET)

if(OpenCV_FOUND)
    message("SUCCESS: Found OpenCV via default search")
    message("  Version: ${OpenCV_VERSION}")
    message("  Config: ${OpenCV_CONFIG_FILE}")
else()
    message("FAILED: OpenCV not found via default search")
endif()

运行:

cmake -P test_opencv.cmake

我在这步的时候运行报错提示Protobuf缺失的问题,所以我又安装了Protobuf

# 进入 vcpkg 目录
cd D:\ProjectC\Dev\tools\vcpkg

# 安装 Protobuf
.\vcpkg install protobuf:x86-windows

# 安装完成后,集成到系统
.\vcpkg integrate install

如果需要,安装其他缺失的依赖

# 查看 opencv4 的依赖关系
.\vcpkg depend-info opencv4

# 安装可能缺失的依赖
.\vcpkg install protobuf:x86-windows
.\vcpkg install eigen3:x86-windows
.\vcpkg install openexr:x86-windows

3.在运行后面之前最好先保证CMake 正常工作:

# CMakeLists.txt - 测试基本功能
cmake_minimum_required(VERSION 3.15)
project(TestProject)

add_executable(TestProject main.cpp)

main.cpp

#include <iostream>

int main() {
    std::cout << "CMake is working!" << std::endl;
    std::cout << "Visual Studio 2019 toolchain is configured." << std::endl;
    return 0;
}

运行:

D:\ProjectC\Dev\tools\CMake\bin\cmake.exe -B test_build -G "Visual Studio 16 2019" -A win32

4.然后添加 vcpkg 工具链:

# 使用 vcpkg 工具链
D:\ProjectC\Dev\tools\CMake\bin\cmake.exe -B build `
  -DCMAKE_TOOLCHAIN_FILE="D:/ProjectC/Dev/tools/vcpkg/scripts/buildsystems/vcpkg.cmake" `
  -G "Visual Studio 16 2019" `
  -A win32

5.在确定基础CMake和vcpkg配置都没有问题。现在需要正确设置OpenCV的查找路径。

  1. 首先确认OpenCV配置文件的位置

    # 检查vcpkg安装的OpenCV配置文件
    dir "D:\ProjectC\Dev\tools\vcpkg\installed\x86-windows\share\opencv4\*.cmake"

  2. 检查VCPKG_INSTALLED_DIR环境变量

    # 检查VCPKG_INSTALLED_DIR是否存在
    echo $env:VCPKG_INSTALLED_DIR

    # 如果没有,手动设置
    $env:VCPKG_INSTALLED_DIR = "D:\ProjectC\Dev\tools\vcpkg\installed"

  3. 创建一键配置脚本
    创建 configure_opencv.bat:

    @echo off
    setlocal
    
    echo Setting up environment...
    set PATH=D:\ProjectC\Dev\tools\CMake\bin;%PATH%
    set VCPKG_INSTALLED_DIR=D:\ProjectC\Dev\tools\vcpkg\installed
    
    echo Checking OpenCV configuration files...
    dir "D:\ProjectC\Dev\tools\vcpkg\installed\x86-windows\share\opencv4\*.cmake"
    
    echo Cleaning build directory...
    if exist build rmdir /s /q build
    
    echo Configuring with vcpkg...
    cmake -B build ^
        -DCMAKE_TOOLCHAIN_FILE="D:/ProjectC/Dev/tools/vcpkg/scripts/buildsystems/vcpkg.cmake" ^
        -DVCPKG_INSTALLED_DIR="D:/ProjectC/Dev/tools/vcpkg/installed" ^
        -DOpenCV_ROOT="D:/ProjectC/Dev/tools/vcpkg/installed/x86-windows/share/opencv4" ^
        -G "Visual Studio 16 2019" ^
        -A win32 ^
        -DCMAKE_BUILD_TYPE=Debug
    
    if %errorlevel% equ 0 (
        echo.
        echo Configuration successful!
        echo.
        echo Building project...
        cmake --build build --config Debug
        if %errorlevel% equ 0 (
            echo.
            echo Build successful!
            echo Executable: build\Debug\Project_1.exe
        )
    ) else (
        echo.
        echo Configuration failed!
    )
    
    pause

  4. .\configure_opencv.bat     运行这个脚本

6.运行完没报红说明配置和构建成功了,不过可能会警告你OpenCV_ROOT 没有被项目使用,那很正常。

接下来就是需要用带opencv的代码运行试一下了

  1. 修改 CMakeLists.txt 来使用 OpenCV

    cmake_minimum_required(VERSION 3.15)
    
    # 启用 CMP0074 策略,让 OpenCV_ROOT 生效
    cmake_policy(SET CMP0074 NEW)
    
    # 注意:这里使用 TestProject 作为项目名(因为之前构建的是 TestProject.exe)
    project(TestProject)  
    
    # 设置 OpenCV 路径
    set(OpenCV_ROOT "D:/ProjectC/Dev/tools/vcpkg/installed/x86-windows/share/opencv4")
    
    # 查找 OpenCV 包
    find_package(OpenCV REQUIRED)
    
    # 输出调试信息
    message(STATUS "OpenCV found: ${OpenCV_FOUND}")
    message(STATUS "OpenCV version: ${OpenCV_VERSION}")
    
    # 添加可执行文件
    add_executable(${PROJECT_NAME} main.cpp)
    
    # 链接 OpenCV 库
    target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
    
    # 包含 OpenCV 头文件目录
    target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
  2. 更新 main.cpp 来使用 OpenCV
     

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    int main() {
        std::cout << "OpenCV version: " << CV_VERSION << std::endl;
        
        // 创建一个简单的图像
        cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
        
        // 画一个圆
        cv::circle(image, cv::Point(250, 250), 100, cv::Scalar(0, 0, 255), 3);
        
        // 添加文本
        cv::putText(image, "OpenCV Works!", 
                    cv::Point(150, 250),
                    cv::FONT_HERSHEY_SIMPLEX, 1.0,
                    cv::Scalar(255, 255, 255), 2);
        
        std::cout << "Image created: " << image.cols << "x" << image.rows << std::endl;
        
        // 显示图像
        cv::imshow("OpenCV Test", image);
        cv::waitKey(0);
        
        return 0;
    }
  3. 重新配置和构建

    # 清理旧的构建
    Remove-Item -Recurse -Force build -ErrorAction SilentlyContinue
    
    # 重新配置
    .\configure_opencv.bat
  4. 检查运行结果

    运行生成的可执行文件:

    .\build\Debug\TestProject.exe

    你应该看到一个 OpenCV 窗口显示一个红色的圆圈和文字。看到就代表成功了。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐