权双
发布于 2026-09-06 / 6 阅读
0

OpenCV:开源计算机视觉库

OpenCV 是一个开源计算机视觉库。可用于图像读取、写入、处理、计算机视觉及深度学习推理等。

1 环境配置

为了确保代码的跨平台兼容性与可移植性,本库采用 CMake 作为核心构建系统。以下是经过严格验证的演示环境配置。

📊 环境总览

🖥️ 平台🔧 硬件配置💿 操作系统⚙️ 编译器工具链
WindowsIntel Core i5‑13490FWindows 11 ProVisual Studio 2026 (MSVC v145) + CMake 4.4.3
LinuxRaspberry Pi 4BDebian GNU/Linux 13 (trixie)gcc/g++

📦 下载项目

选择OpenCV 4.12.0为例:

  • <opencv-4.12.0.zip>

项目地址:https://github.com/opencv/opencv/releases/tag/4.12.0
选择Source code (zip)下载源码。

  • <opencv_contrib-4.12.0.zip>

项目地址:https://github.com/opencv/opencv_contrib/releases/tag/4.12.0

选择Source code (zip)下载源码。


⚙️ 目录结构准备
本库采用 CMake 构建,编译完成后将生成标准的开发目录结构。包含头文件、库文件以及 CMake 配置包,可直接被其他项目 find_package引用。

  1. 将<opencv-4.12.0.zip>文件解压到<opencv-4.12.0>文件夹
  2. 将<opencv_contrib-4.12.0.zip>文件解压到<opencv_contrib-4.12.0>文件夹
  3. 将<opencv_contrib-4.12.0>拷贝到<opencv-4.12.0>文件夹下
  4. 将拷贝后的<opencv_contrib-4.12.0>文件夹名字修改为<opencv_contrib_4_12_0>

编译前目录结构如下:

└─opencv-4.12.0
    ├─.cache
    ├─3rdparty
    ├─apps
    ├─cmake
    ├─data
    ├─doc
    ├─hal
    ├─include
    ├─modules
    ├─opencv_contrib_4_12_0
    ├─platforms
    ├─samples
    ├─.editorconfig
    ├─CMakeLists.txt
    ├─CONTRIBUTING.md
    ├─COPYRIGHT
    ├─LICENSE
    ├─README.md
    ├─SECURITY.md

1.1 Windows编译安装

1️⃣ 构建
我们选择 <C:/package/OpenCV_4_12_0> 作为安装目录,并为 Debug 版本添加后缀 d,避免同名库覆盖。

cmake -S . -B build ^
	-DCMAKE_INSTALL_PREFIX="C:/package/OpenCV_4_12_0" ^
	-DOPENCV_EXTRA_MODULES_PATH="./opencv_contrib_4_12_0/modules" ^
	-DOPENCV_GENERATE_PKGCONFIG=OFF ^
	-DBUILD_EXAMPLES=OFF ^
	-DBUILD_TESTS=OFF ^
	-DBUILD_opencv_world=OFF ^
	-DCMAKE_DEBUG_POSTFIX="d" ^
	-DBUILD_SHARED_LIBS=OFF ^
	-DOPENCV_DOWNLOAD_MIRROR_ID=gitcode ^
	-DBUILD_WITH_STATIC_CRT=OFF ^
	-DWITH_DSHOW=ON ^
	-DWITH_MSMF=ON ^
	-DWITH_FFMPEG=ON

说明:-DCMAKE_DEBUG_POSTFIX="d" 会在 Debug 库名字后加上 d,这是因为Windows平台下,Release 和 Debug 编译的库是无法通用的,编译的 Debug 库后面加上 d 用于区分。

2️⃣ 编译

# Debug 模式
cmake --build build --config Debug -j 8

# Release 模式
cmake --build build --config Release -j 8

3️⃣ 安装
将编译产物(头文件、库、CMake 配置文件)安装到 <C:/package/OpenCV_4_12_0> 目录:

# 安装 Debug 版本
cmake --install build --config Debug

# 安装 Release 版本
cmake --install build --config Release

1.2 Linux编译安装

Linux环境下我尝试过源码安装,但未成功!因此下载使用软件包中库。

1️⃣ 下载安装

# 更新软件包列表
sudo apt-get update

# 安装 OpenCV 开发库(包含 C++ 头文件和库文件)
sudo apt-get install libopencv-dev

2️⃣ 验证版本

pkg-config --modversion opencv4

输出:4.10.0

2 OpenCV使用示例

OpenCV这个图像处理库功能众多,本博客给出一个获取摄像头并显示的demo示例。

📁 测试代码目录结构

└─OpenXLSX
    │ CMakeLists.txt
    └─opencv_cam
            CMakeLists.txt
            opencv_cam.cpp

🟦 编写顶层CMake配置文件
我们根据操作系统不同,将 OpenXLSX 的 CMake 配置路径设置不同路径,实际使用时请替换为你自己的安装位置。

  • Windows: C:/package/OpenCV_4_12_0/staticlib
  • Linux : 因为在linux环境下是通过软件包形式安装的,因此无需设置OpenCV_DIR路径,也是可以通过find_package找到OpenCV的。但是为了CMake配置文件的兼容性,在linux平台下也可保留OpenCV_DIR设置的语句,不会对linux平台OpenCV的使用造成影响。
cmake_minimum_required(VERSION 4.4)
project(TestOpenCV VERSION 1.0.0 LANGUAGES CXX)

if(NOT WIN32)
    set(LIBRARY_PATH  "~/package")
else()
    set(LIBRARY_PATH  "C:/package")
endif()

# Find dependency OpenCV
set(OpenCV_DIR "${LIBRARY_PATH}/OpenCV_4_12_0/staticlib")
find_package(OpenCV CONFIG REQUIRED core imgproc highgui videoio imgcodecs)

if(OpenCV_FOUND)
    message(STATUS "OpenCV version: ${OpenCV_VERSION}")
    message(STATUS "OpenCV include dirs: ${OpenCV_INCLUDE_DIRS}")
    message(STATUS "OpenCV libs: ${OpenCV_LIBS}")
else()
    message(FATAL_ERROR "OpenCV not found!")
endif()

add_subdirectory(opencv_cam)

✍️ opencv_cam CMake配置文件

cmake_minimum_required(VERSION 4.4)
project(opencv_cam CXX)

add_executable(${PROJECT_NAME})

target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/opencv_cam.cpp )

# Configure linkage for ${PROJECT_NAME}
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenCV_INCLUDE_DIRS})
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)

✍️ 示例代码
下面这段代码演示了:打开摄像头,读取数据帧,并显示在桌面。

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

int main(int argc, char** argv)
{
    // Turn on the camera
    cv::VideoCapture cap(0);

    // Check if the camera has been successfully turned on
    if (!cap.isOpened()) {
        return -1;
    }

    // Print camera information
    std::cout << "The camera has been successfully turned on" << std::endl;
    std::cout << "w:" << cap.get(cv::CAP_PROP_FRAME_WIDTH) << "   h:" << cap.get(cv::CAP_PROP_FRAME_HEIGHT) << std::endl;
    std::cout << "fps:" << cap.get(cv::CAP_PROP_FPS) << std::endl;
    std::cout << "Press the 'q' key to exit." << std::endl;

    cv::Mat frame;

    while (true) {
        // Read a frame
        cap >> frame;

        if (frame.empty()) {            
            continue;
        }

        // display frame
        cv::imshow("OpenCV Camera Demo", frame);
        int key = cv::waitKey(10);
        if (key == 'q' || key == 'Q' || key == 27) {  
            break;
        }
    }

    // Release resources
    cap.release();
    cv::destroyAllWindows();

    return 0;
}

2.3 编译运行

Windows和Linux在编译和运行上面稍有差异,因此本文会分别演示两种系统的操作流程。

2.3.1 Windows平台编译运行

首先进入项目目录:
1️⃣ 构建

cmake -S . -B build

2️⃣ 编译
可选择编译 Debug 版本或 Release版本

  • Debug模式
cmake --build build --config Debug
  • Release模式
cmake --build build --config Release

3️⃣ 运行

运行生成的可执行文件:opencv_cam.exe

桌面会实时刷新摄像头捕获的视频流。

2.3.2 Linux平台编译运行

首先进入项目目录:
1️⃣ 构建
Linux平台下是在构建时选择 Release 或 Debug

  • Release模式
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
  • Debug模式
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug

2️⃣ 编译

cmake --build build

3️⃣ 运行

运行生成的可执行文件:opencv_cam.exe

桌面会实时刷新摄像头捕获的视频流。

3 参考资料