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-python 和 opencv-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 预编译二进制
- 从 opencv.org/releases 下载 Windows 安装包
- 解压后设置环境变量:
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
Settings → Python Interpreter → Add- 选择虚拟环境中的 Python
- 安装
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 的多种安装方式,从最简单的 pip 安装到完整的源码编译(含 CUDA、contrib),以及 IDE 配置和 GPU 支持验证。