【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知
标签:
OpenCV计算机视觉图像处理PythonCV入门
难度:⭐ 入门 | 阅读时长:约 35 分钟 | 系列:第 01/12 集
前置要求:无 | 下一集:02 环境安装
写在前面
如果你搜过「图像处理怎么学」「OpenCV 是什么」,大概率听说过这个名字。OpenCV 几乎是每个计算机视觉工程师的 第一课——从读取一张照片,到检测人脸、跟踪车辆,它都能胜任。
本集不急着写代码,先帮你搞清楚:计算机视觉在做什么、OpenCV 能帮你做什么、学习路线怎么走。
本集学习目标
- 理解计算机视觉的基本概念与应用
- 了解 OpenCV 的发展历史与核心优势
- 掌握图像在计算机中的表示方式(像素、通道、矩阵)
- 认识 OpenCV-Python 的模块结构
文章目录
1.1 什么是计算机视觉?
一句话定义
计算机视觉 = 让计算机从图像或视频中自动提取、理解信息的技术。
生活场景
| 场景 | 计算机视觉在做什么 |
|---|---|
| 手机扫码 | 识别二维码图案 |
| 美颜相机 | 检测人脸、磨皮美白 |
| 自动驾驶 | 识别车道线、行人、车辆 |
| 工业质检 | 检测产品表面缺陷 |
| 医疗影像 | 定位病灶区域 |
| 安防监控 | 检测异常行为、人脸识别 |
主要任务分类
1.2 什么是 OpenCV?
名字的含义
OpenCV = Open Source Computer Vision Library(开源计算机视觉库)
核心特点
| 特点 | 说明 |
|---|---|
| 开源免费 | BSD 许可证,商用友好 |
| 跨平台 | Windows / Linux / macOS / Android / iOS |
| 多语言 | C++、Python、Java 等 |
| 功能全面 | 2000+ 算法,覆盖 CV 全流程 |
| 高性能 | 底层 C/C++ 优化,支持 GPU 加速 |
| 社区活跃 | 全球最大 CV 开源社区之一 |
发展简史
| 年份 | 里程碑 |
|---|---|
| 1999 | Intel 在俄罗斯发起 OpenCV 项目 |
| 2006 | OpenCV 1.0 发布 |
| 2009 | OpenCV 2.0,引入 C++ 接口 |
| 2015 | OpenCV 3.0,模块化重构 |
| 2018 | OpenCV 4.0,移除 C API,全面 C++11 |
| 2020+ | OpenCV 4.x 持续更新,DNN 模块增强 |
OpenCV-Python
OpenCV-Python 是 OpenCV 的 Python 绑定,底层调用 C++ 实现,兼顾 易用性 和 运行效率。
import cv2
print(cv2.__version__) # 如 4.9.0
| 对比 | C++ | Python |
|---|---|---|
| 性能 | 最快 | 略慢(够用) |
| 开发效率 | 较低 | 高 |
| 适合 | 嵌入式、极致性能 | 学习、原型、科研 |
1.3 图像的数字化表示
像素(Pixel)
图像由一个个小方块组成,每个方块叫一个 像素,存储颜色信息。
一张 3×3 的灰度图:
┌───┬───┬───┐
│ 0 │128│255│ ← 每个数字代表亮度 (0=黑, 255=白)
├───┼───┼───┤
│ 64│192│ 32│
├───┼───┼───┤
│255│ 0│128│
└───┴───┴───┘
彩色图像:三通道 BGR
OpenCV 默认使用 BGR 顺序(注意:不是 RGB!):
| 通道 | 含义 | 范围 |
|---|---|---|
| B | 蓝色 Blue | 0~255 |
| G | 绿色 Green | 0~255 |
| R | 红色 Red | 0~255 |
彩色像素 = (B, G, R)
纯白 = (255, 255, 255)
纯黑 = (0, 0, 0)
纯红 = (0, 0, 255) ← 注意 BGR 顺序!
NumPy 数组表示
OpenCV 中图像本质是 NumPy 多维数组:
| 图像类型 | 数组形状 | dtype |
|---|---|---|
| 灰度图 | (H, W) | uint8 |
| 彩色图 | (H, W, 3) | uint8 |
| 带 Alpha | (H, W, 4) | uint8 |
import numpy as np
# 一张 480×640 的彩色图
img = np.zeros((480, 640, 3), dtype=np.uint8)
print(img.shape) # (480, 640, 3)
1.4 OpenCV 模块结构
根据 官方文档,主要模块如下:
| 模块 | 功能 | 本系列对应 |
|---|---|---|
| core | 核心数据结构、矩阵运算 | 第 05 集 |
| imgproc | 图像处理(滤波、变换、形态学) | 第 06~08 集 |
| highgui | 窗口显示、鼠标键盘交互 | 第 03~04 集 |
| videoio | 视频读写 | 第 04、10 集 |
| features2d | 特征检测与描述 | 第 09 集 |
| video | 运动分析、光流、跟踪 | 第 10 集 |
| ml | 机器学习(KNN、SVM) | 第 11 集 |
| objdetect | 目标检测(级联分类器) | 第 12 集 |
| dnn | 深度学习推理 | 可与 YOLO 等结合 |
| calib3d | 相机标定、3D 重建 | 进阶 |
1.5 学习路线规划
本系列 12 集路径
基础层 (01~04): 概念 → 环境 → 图像 → 视频
↓
进阶层 (05~08): 像素操作 → 颜色几何 → 滤波形态学 → 边缘轮廓
↓
高级层 (09~11): 特征匹配 → 视频分析 → 机器学习
↓
实战层 (12): 目标检测 + 综合项目
学 OpenCV 需要什么数学?
| 数学知识 | 重要程度 | 用在哪 |
|---|---|---|
| 基础算术 | 必须 | 像素运算 |
| 矩阵/向量 | 推荐 | 几何变换 |
| 微积分 | 了解 | 梯度、边缘检测 |
| 概率统计 | 了解 | 机器学习模块 |
| 线性代数 | 进阶 | 特征分解、SVD |
💡 小白友好:本系列会先用直觉和图示讲解,再引入公式。
1.6 踩坑指南
| 坑 | 正确认知 |
|---|---|
| OpenCV 只能做 AI | OpenCV 是传统 CV 库,AI 是 dnn 模块之一 |
| OpenCV = 目标检测 | 检测只是功能之一,图像处理才是基础 |
| 必须学 C++ | Python 版足够应对 90% 学习和项目 |
| RGB 和 BGR 一样 | OpenCV 默认 BGR,和 PIL/matplotlib 不同 |
| 图像就是图片文件 | 在内存中是 NumPy 数组 |
1.7 常见问题 FAQ
Q1:OpenCV 和 PIL/Pillow 有什么区别?
A:PIL 侧重图像读写和简单处理;OpenCV 是完整 CV 库,含特征检测、视频分析、机器学习等。做 CV 项目首选 OpenCV。
Q2:需要先学深度学习才能学 OpenCV 吗?
A:不需要。OpenCV 大量功能不依赖深度学习,且传统 CV 是 DL 的基础。
Q3:OpenCV 4.x 和 3.x 差别大吗?
A:4.x 移除了旧 C API,推荐新项目直接用 4.x。本系列基于 4.x。
Q4:OpenCV 能替代 YOLO 吗?
A:不能替代。OpenCV 提供传统检测(如 Haar 级联)和 DNN 推理接口;YOLO 等深度学习模型通常通过 OpenCV dnn 模块加载。
1.8 知识自测
- 用自己的话解释「计算机视觉」和「图像处理」的区别。
- OpenCV 中纯红色像素的 BGR 值是多少?
- 一张 1920×1080 的彩色图,NumPy 数组 shape 是什么?
- 判断:OpenCV 只能使用 C++ 开发。( )
(0, 0, 255)— BGR 顺序(1080, 1920, 3)— 高×宽×通道- ✗ — 支持 Python、Java 等多种语言
1.9 本集小结
| 概念 | 要点 |
|---|---|
| 计算机视觉 | 让机器理解图像/视频 |
| OpenCV | 开源跨平台 CV 库,2000+ 算法 |
| 像素 | 图像最小单元,0~255 |
| BGR | OpenCV 默认颜色顺序 |
| NumPy | 图像在内存中的表示 |
| 上一集 | 下一集 |
|---|---|
| 系列首页 | 第02集:环境安装 → |
参考:OpenCV中文官方文档 | OpenCVTutorials
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/weixin_43025151/article/details/164425587




