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

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_CUDAOFF启用 CUDA GPU 加速
OPENCV_DNN_CUDAOFFDNN 模块 CUDA 推理
WITH_CUDNNOFFcuDNN 支持
CUDA_ARCH_BIN自动检测目标 GPU 架构
OPENCV_ENABLE_NONFREEOFF启用专利算法(SIFT 等)
OPENCV_EXTRA_MODULES_PATHcontrib 模块路径
BUILD_opencv_python3AUTO构建 Python3 绑定
WITH_TBBOFFIntel TBB 多线程
WITH_OPENMPOFFOpenMP 并行
WITH_GTKAUTOLinux GUI 支持
WITH_QTOFFQt GUI 支持
WITH_VULKANOFFVulkan 后端

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代表型号
Turing7.5RTX 2060/2070/2080, GTX 1650/1660
Ampere8.0/8.6RTX 3060/3070/3080/3090, A100
Ada Lovelace8.9RTX 4060/4070/4080/4090
Hopper9.0H100, 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 / charucoArUco 标记检测AR / 相机标定
face人脸识别LBPH、Eigen、Fisher
text文字检测基于 SWT 的文字检测
tracking目标追踪KCF、MOSSE、CSRT
stereo立体匹配丰富的立体算法
cudaarithmCUDA 算术GPU 加速矩阵运算
cudafiltersCUDA 滤波GPU 加速滤波
cudaimgprocCUDA 图像处理GPU 颜色转换等

2.10 常见安装问题

问题原因解决方案
ImportError: libGL.so.1headless 环境缺库pip install opencv-python-headless
ImportError: numpyNumPy 版本不兼容pip install numpy>=1.21
编译时找不到 PythonCMake 路径错误显式设置 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.htmlLinux 编译教程
CUDA 兼容性developer.nvidia.com/cuda-gpusGPU 架构查询
PyPI 包说明pypi.org/project/opencv-pythonpip 包详细说明
下一章第 03 章 — 图像基础读取/显示/保存

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