第一章:OpenCV概述与环境搭建

各位同学,欢迎来到《OpenCV图像处理从零到项目落地》的第一课。

说实话,每次带新人入门,我都要先问一个问题:你为什么要学OpenCV?

有人想做人脸识别门禁,有人想搞自动驾驶车道检测,还有人单纯觉得「处理图片很酷」。不管什么理由,OpenCV都是你绕不开的那把刀。我个人习惯把它比作「图像处理界的瑞士军刀」——功能多、上手快、社区活跃,而且免费。

1.1 OpenCV是什么?

OpenCV的全称是 Open Source Computer Vision Library,开源计算机视觉库。1999年由Intel发起,现在由社区维护。它支持C++、Python、Java等多种语言,但说实话,Python版是现在最流行的选择

我刚开始接触OpenCV时用的是C++版本,那时候配环境能折腾一整天。后来转Python,嗯,真香。

OpenCV能做什么?我列几个实际场景:

  • 图像基础操作:读取、显示、保存、裁剪、旋转
  • 图像处理:滤波、边缘检测、形态学操作
  • 特征提取:角点检测、SIFT、ORB
  • 目标检测:人脸检测、行人检测、二维码识别
  • 视频分析:运动跟踪、背景建模
  • 深度学习集成:加载ONNX模型、调用YOLO

一句话总结:只要跟图像、视频沾边的事,OpenCV基本都能干。干不了的,它也能给你搭好脚手架。

1.2 应用领域一览

你可能觉得计算机视觉离生活很远。其实不是。我随便举几个例子:

领域 典型应用 OpenCV角色
安防监控 人脸识别门禁、异常行为检测 图像采集 + 人脸检测
自动驾驶 车道线检测、交通标志识别 图像预处理 + 特征提取
医疗影像 CT图像分割、细胞计数 滤波 + 阈值分割
工业质检 产品表面缺陷检测 模板匹配 + 边缘检测
AR/VR 标记识别、姿态估计 相机标定 + 位姿解算
日常生活 二维码扫描、文档扫描 透视变换 + 二值化

我在做工业质检项目时,遇到过一条产线需要检测螺丝有没有拧紧。用OpenCV做边缘检测 + 圆形拟合,半小时就搞定了原型。你想想看,要是从零写算法,得花多久?

1.3 Python环境配置

好,理论说完了,咱们动手。第一步:装Python。

我个人建议用 Python 3.8 ~ 3.11 之间的版本。太新的版本(比如3.12)有些库还没适配,容易踩坑。我曾经因为用了Python 3.12,装OpenCV时折腾了两个小时——后来发现是版本不兼容。

推荐方案:用Anaconda管理环境

  1. https://www.anaconda.com/download 下载Anaconda(选Python 3.10版本)
  2. 安装时勾选「Add Anaconda to my PATH environment variable」
  3. 打开终端(Windows用cmd或PowerShell,Mac/Linux用terminal)
  4. 创建虚拟环境:conda create -n opencv_env python=3.10
  5. 激活环境:conda activate opencv_env

小技巧:虚拟环境就像一个个独立的工具箱。做项目A用一套工具,做项目B用另一套,互不干扰。我每个项目都会新建一个环境,避免依赖冲突。

如果你不想装Anaconda(它确实有点大),也可以用 venv

# 创建虚拟环境
python -m venv opencv_env

# 激活(Windows)
opencv_env\Scripts\activate

# 激活(Mac/Linux)
source opencv_env/bin/activate

1.4 安装OpenCV库

环境准备好了,接下来装OpenCV。这里有个坑,我先说清楚:

OpenCV的Python包有两个版本:

  • opencv-python:核心库,包含主要功能
  • opencv-contrib-python:核心库 + 扩展模块(如SIFT、SURF等专利算法)

我建议直接装 contrib 版本。为什么?因为有些算法(比如SIFT)在核心库里被移除了,但contrib里还有。你不想用到的时候再回头补装吧?

# 安装OpenCV(推荐)
pip install opencv-contrib-python

# 或者只装核心版
pip install opencv-python

装完之后,验证一下:

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

如果输出版本号(比如 4.9.0),恭喜你,装好了。

注意:如果你在中国大陆,pip下载可能很慢。可以加镜像源:pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

1.5 第一个OpenCV程序

仪式感还是要有的。咱们写一个「读取图片并显示」的程序。

先准备一张图片,放在项目文件夹里,命名为 test.jpg。然后新建一个Python文件 first_opencv.py

import cv2

# 读取图片
img = cv2.imread('test.jpg')

# 检查是否读取成功
if img is None:
    print("图片读取失败,请检查文件路径")
    exit()

# 显示图片
cv2.imshow('My First OpenCV Image', img)

# 等待按键
cv2.waitKey(0)

# 关闭所有窗口
cv2.destroyAllWindows()

运行一下:

python first_opencv.py

如果一切正常,你会看到一个窗口,里面显示着你选的图片。按任意键关闭。

嗯,就这么简单。但这里有几个细节我得提醒你:

  • cv2.imread() 默认以BGR格式读取,不是RGB。这点跟很多图像库不一样,后面我们会专门讲。
  • cv2.waitKey(0) 表示无限等待按键。如果填 1000,就是等1秒后自动关闭。
  • cv2.destroyAllWindows() 最好加上,否则窗口可能关不干净。

避坑指南:我曾经在Jupyter Notebook里直接跑 cv2.imshow(),结果窗口闪一下就没了。后来发现,Jupyter不支持这种交互式窗口。解决办法是用 cv2.imwrite() 保存图片,或者用matplotlib显示。

如果你用的是Jupyter Notebook,可以这样:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread('test.jpg')
# 转换颜色空间:BGR -> RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.imshow(img_rgb)
plt.axis('off')
plt.show()

这样就能在Notebook里看到图片了。

1.6 本章小结

这一章我们干了三件事:

  1. 了解了OpenCV是什么、能干什么
  2. 配好了Python和OpenCV环境
  3. 跑通了第一个OpenCV程序

说实话,环境搭建往往是劝退新手的第一关。但只要你跟着步骤走,应该不会出大问题。如果卡住了,检查三件事:Python版本对不对、pip源通不通、图片路径写没写对。

下一章,咱们正式进入图像处理的世界——从像素开始,一点点揭开OpenCV的面纱。

到时候见。