强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

OpenCV 计算机视觉完全教程 / 第 02 章 — 安装与环境配置

第 02 章 — 安装与环境配置

2.1 安装方式概览

方式 适用场景 优点 缺点
pip install 快速开发、学习 一条命令、自动依赖 不含 CUDA、部分 contrib 缺失
conda install 数据科学环境 环境隔离好 版本可能滞后
源码编译 需要 CUDA / 自定义模块 完全可控 耗时、依赖多
预编译包 Windows 快速使用 无编译 版本固定

2.2 Python 安装(pip 方式)

2.2.1 基础安装

# 创建虚拟环境(推荐)
python -m venv cv-env
source cv-env/bin/activate   # Linux/macOS
# cv-env\Scripts\activate    # Windows

# 安装 OpenCV 主模块
pip install opencv-python

# 安装包含 contrib 模块的版本(含 SIFT、ArUco 等)
pip install opencv-contrib-python

# 安装带 GUI 支持的完整版(含 highgui)
pip install opencv-python-headless   # 无 GUI(服务器/Docker 推荐)
# 或
pip install opencv-python            # 含 GUI

2.2.2 包版本对比

pip 包名 包含内容 适用场景
opencv-python 主模块 + GUI 桌面开发
opencv-python-headless 主模块(无 GUI) 服务器/Docker
opencv-contrib-python 主模块 + contrib + GUI 完整功能开发
opencv-contrib-python-headless 主模块 + contrib(无 GUI) 服务器完整功能

注意: 不要同时安装 opencv-pythonopencv-contrib-python,会冲突。

2.2.3 验证安装

import cv2

print(f"OpenCV 版本: {cv2.__version__}")
print(f"构建信息: {cv2.getBuildInformation()}")

# 检查关键模块
modules = ['CORE', 'IMGPROC', 'IMCODECS', 'HIGHGUI',
           'VIDEOIO', 'DNN', 'FEATURES2D', 'CALIB3D']
for mod in modules:
    print(f"  {mod}: {'✅' if hasattr(cv2, 'haveImageReader') else '...'}")

# 测试基本功能
import numpy as np
img = np.zeros((100, 100, 3), dtype=np.uint8)
cv2.circle(img, (50, 50), 30, (255, 0, 0), -1)
success = cv2.imwrite("test_output.png", img)
print(f"图像写入: {'成功' if success else '失败'}")

2.3 conda 安装

# 创建环境
conda create -n cv python=3.11
conda activate cv

# 从 conda-forge 安装(推荐)
conda install -c conda-forge opencv

# 验证
python -c "import cv2; print(cv2.__version__)"

2.4 源码编译安装(完整版)

源码编译是获取 CUDA 支持和自定义模块的唯一方式。

2.4.1 安装依赖(Ubuntu 22.04/24.04)

# 系统依赖
sudo apt update
sudo apt install -y \
    build-essential cmake cmake-gui git pkg-config \
    libjpeg-dev libpng-dev libtiff-dev \
    libavcodec-dev libavformat-dev libswscale-dev \
    libgtk-3-dev libcanberra-gtk3-dev \
    libatlas-base-dev gfortran \
    python3-dev python3-numpy python3-pip \
    libv4l-dev v4l-utils \
    libtbb-dev libeigen3-dev

# 可选:GStreamer 支持
sudo apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

# 可选:Intel 性能原语
sudo apt install -y ippccw ippcvw ippiew ippw

2.4.2 下载源码

cd ~/src
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

cd opencv
git checkout 4.10.0          # 选择稳定版本
cd ../opencv_contrib
git checkout 4.10.0          # 版本必须匹配

2.4.3 CMake 配置

cd ~/src/opencv
mkdir build && cd build

cmake \
    -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
    -D BUILD_opencv_python3=ON \
    -D PYTHON3_EXECUTABLE=$(which python3) \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_DOCS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_CUDA=ON \
    -D CUDA_ARCH_BIN="7.5,8.0,8.6,8.9,9.0" \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D WITH_TBB=ON \
    -D WITH_OPENGL=ON \
    ..

2.4.4 关键 CMake 选项

选项 默认值 说明
WITH_CUDA OFF 启用 CUDA GPU 加速
OPENCV_DNN_CUDA OFF DNN 模块 CUDA 推理
WITH_CUDNN OFF cuDNN 支持
CUDA_ARCH_BIN 自动检测 目标 GPU 架构
OPENCV_ENABLE_NONFREE OFF 启用专利算法(SIFT 等)
OPENCV_EXTRA_MODULES_PATH contrib 模块路径
BUILD_opencv_python3 AUTO 构建 Python3 绑定
WITH_TBB OFF Intel TBB 多线程
WITH_OPENMP OFF OpenMP 并行
WITH_GTK AUTO Linux GUI 支持
WITH_QT OFF Qt GUI 支持
WITH_VULKAN OFF Vulkan 后端

2.4.5 编译与安装

# 查看 CPU 核心数
NPROC=$(nproc)

# 编译(-j 使用所有核心)
make -j$NPROC

# 安装
sudo make install
sudo ldconfig

# 验证安装
python3 -c "import cv2; print(cv2.__version__)"

2.4.6 GPU 架构速查

GPU 架构 Compute Capability 代表型号
Turing 7.5 RTX 2060/2070/2080, GTX 1650/1660
Ampere 8.0/8.6 RTX 3060/3070/3080/3090, A100
Ada Lovelace 8.9 RTX 4060/4070/4080/4090
Hopper 9.0 H100, H200

2.5 Windows 安装

2.5.1 pip 方式(最简单)

pip install opencv-contrib-python
python -c "import cv2; print(cv2.__version__)"

2.5.2 预编译二进制

  1. opencv.org/releases 下载 Windows 安装包
  2. 解压后设置环境变量:
    • OPENCV_DIR = C:\opencv\build
    • %OPENCV_DIR%\x64\vc16\bin 加入 PATH

2.5.3 Visual Studio 编译

# 使用 CMake GUI
# Source: C:/src/opencv
# Build:  C:/src/opencv/build
# Generator: Visual Studio 17 2022, x64
# 然后在 VS 中编译 Release

2.6 macOS 安装

# 使用 Homebrew
brew install opencv

# 指定 Python 路径
cmake -D PYTHON3_EXECUTABLE=$(brew --prefix python3)/bin/python3 ..

2.7 IDE 配置

2.7.1 VS Code

// .vscode/settings.json
{
    "python.analysis.extraPaths": [
        "/usr/local/lib/python3.11/site-packages"
    ],
    "python.defaultInterpreterPath": "cv-env/bin/python",
    "C_Cpp.includePath": [
        "/usr/local/include/opencv4"
    ]
}

2.7.2 PyCharm

  1. Settings → Python Interpreter → Add
  2. 选择虚拟环境中的 Python
  3. 安装 opencv-contrib-python

2.7.3 CMakeLists.txt 模板(C++ 项目)

cmake_minimum_required(VERSION 3.16)
project(my_cv_project)

set(CMAKE_CXX_STANDARD 17)

find_package(OpenCV 4.8 REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(main main.cpp)
target_link_libraries(main ${OpenCV_LIBS})

2.8 GPU 支持配置

2.8.1 CUDA 环境检查

# 检查 NVIDIA 驱动
nvidia-smi

# 检查 CUDA 版本
nvcc --version

# 检查 cuDNN
cat /usr/include/cudnn_version.h | grep MAJOR -A 2

2.8.2 验证 OpenCV CUDA 支持

import cv2

# 检查 CUDA 设备数
count = cv2.cuda.getCudaEnabledDeviceCount()
print(f"CUDA 设备数: {count}")

if count > 0:
    # 获取设备信息
    info = cv2.cuda.DeviceInfo(0)
    print(f"设备名: {info.name()}")
    print(f"总内存: {info.totalMemory() / 1024**3:.1f} GB")
    print(f"计算能力: {info.majorVersion()}.{info.minorVersion()}")
#include <opencv2/opencv.hpp>
#include <opencv2/core/cuda.hpp>

int main() {
    int count = cv::cuda::getCudaEnabledDeviceCount();
    std::cout << "CUDA 设备: " << count << std::endl;

    if (count > 0) {
        cv::cuda::printShortCudaDeviceInfo(0);
    }
    return 0;
}

2.9 贡献模块(contrib)编译说明

contrib 包含许多实用但未进入主仓库的模块:

模块 功能 说明
xfeatures2d 额外特征检测器 SIFT(已移入主模块 4.4+)、SURF
ximgproc 扩展图像处理 边缘感知滤波、超像素
aruco / charuco ArUco 标记检测 AR / 相机标定
face 人脸识别 LBPH、Eigen、Fisher
text 文字检测 基于 SWT 的文字检测
tracking 目标追踪 KCF、MOSSE、CSRT
stereo 立体匹配 丰富的立体算法
cudaarithm CUDA 算术 GPU 加速矩阵运算
cudafilters CUDA 滤波 GPU 加速滤波
cudaimgproc CUDA 图像处理 GPU 颜色转换等

2.10 常见安装问题

问题 原因 解决方案
ImportError: libGL.so.1 headless 环境缺库 pip install opencv-python-headless
ImportError: numpy NumPy 版本不兼容 pip install numpy>=1.21
编译时找不到 Python CMake 路径错误 显式设置 PYTHON3_EXECUTABLE
CUDA 编译失败 架构不匹配 精确设置 CUDA_ARCH_BIN
undefined symbol 链接库版本冲突 检查 LD_LIBRARY_PATH
GUI 窗口不显示 headless 安装 安装含 GUI 的版本

2.11 扩展阅读

资源 链接 说明
OpenCV 安装指南 docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html Linux 编译教程
CUDA 兼容性 developer.nvidia.com/cuda-gpus GPU 架构查询
PyPI 包说明 pypi.org/project/opencv-python pip 包详细说明
下一章 第 03 章 — 图像基础 读取/显示/保存

本章小结: 掌握了 OpenCV 的多种安装方式,从最简单的 pip 安装到完整的源码编译(含 CUDA、contrib),以及 IDE 配置和 GPU 支持验证。