OpenCV 是一个开源计算机视觉库。可用于图像读取、写入、处理、计算机视觉及深度学习推理等。
1 环境配置
为了确保代码的跨平台兼容性与可移植性,本库采用 CMake 作为核心构建系统。以下是经过严格验证的演示环境配置。
📊 环境总览
| 🖥️ 平台 | 🔧 硬件配置 | 💿 操作系统 | ⚙️ 编译器工具链 |
|---|---|---|---|
| Windows | Intel Core i5‑13490F | Windows 11 Pro | Visual Studio 2026 (MSVC v145) + CMake 4.4.3 |
| Linux | Raspberry Pi 4B | Debian 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引用。
- 将<opencv-4.12.0.zip>文件解压到<opencv-4.12.0>文件夹
- 将<opencv_contrib-4.12.0.zip>文件解压到<opencv_contrib-4.12.0>文件夹
- 将<opencv_contrib-4.12.0>拷贝到<opencv-4.12.0>文件夹下
- 将拷贝后的<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
桌面会实时刷新摄像头捕获的视频流。