第一章: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管理环境
- 去
https://www.anaconda.com/download下载Anaconda(选Python 3.10版本) - 安装时勾选「Add Anaconda to my PATH environment variable」
- 打开终端(Windows用cmd或PowerShell,Mac/Linux用terminal)
- 创建虚拟环境:
conda create -n opencv_env python=3.10 - 激活环境:
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 本章小结
这一章我们干了三件事:
- 了解了OpenCV是什么、能干什么
- 配好了Python和OpenCV环境
- 跑通了第一个OpenCV程序
说实话,环境搭建往往是劝退新手的第一关。但只要你跟着步骤走,应该不会出大问题。如果卡住了,检查三件事:Python版本对不对、pip源通不通、图片路径写没写对。
下一章,咱们正式进入图像处理的世界——从像素开始,一点点揭开OpenCV的面纱。
到时候见。