【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知
标签 :
OpenCV计算机视觉图像处理PythonCV入门难度 :⭐ 入门 | 阅读时长 :约 35 分钟 | 系列 :第 01/12 集
前置要求 :无 | 下一集 :02 环境安装
写在前面
如果你搜过「图像处理怎么学」「OpenCV 是什么」,大概率听说过这个名字。OpenCV 几乎是每个计算机视觉工程师的 第一课------从读取一张照片,到检测人脸、跟踪车辆,它都能胜任。
本集不急着写代码,先帮你搞清楚:计算机视觉在做什么、OpenCV 能帮你做什么、学习路线怎么走。
本集学习目标
- 理解计算机视觉的基本概念与应用
- 了解 OpenCV 的发展历史与核心优势
- 掌握图像在计算机中的表示方式(像素、通道、矩阵)
- 认识 OpenCV-Python 的模块结构
文章目录
- [【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知](#【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知)
-
- 写在前面
- 本集学习目标
- [1.1 什么是计算机视觉?](#1.1 什么是计算机视觉?)
- [1.2 什么是 OpenCV?](#1.2 什么是 OpenCV?)
- [1.3 图像的数字化表示](#1.3 图像的数字化表示)
-
- 像素(Pixel)
- [彩色图像:三通道 BGR](#彩色图像:三通道 BGR)
- [NumPy 数组表示](#NumPy 数组表示)
- [1.4 OpenCV 模块结构](#1.4 OpenCV 模块结构)
- [1.5 学习路线规划](#1.5 学习路线规划)
-
- [本系列 12 集路径](#本系列 12 集路径)
- [学 OpenCV 需要什么数学?](#学 OpenCV 需要什么数学?)
- [1.6 踩坑指南](#1.6 踩坑指南)
- [1.7 常见问题 FAQ](#1.7 常见问题 FAQ)
- [1.8 知识自测](#1.8 知识自测)
- [1.9 本集小结](#1.9 本集小结)
1.1 什么是计算机视觉?
一句话定义
计算机视觉 = 让计算机从图像或视频中自动提取、理解信息的技术。
生活场景
| 场景 | 计算机视觉在做什么 |
|---|---|
| 手机扫码 | 识别二维码图案 |
| 美颜相机 | 检测人脸、磨皮美白 |
| 自动驾驶 | 识别车道线、行人、车辆 |
| 工业质检 | 检测产品表面缺陷 |
| 医疗影像 | 定位病灶区域 |
| 安防监控 | 检测异常行为、人脸识别 |
主要任务分类
#mermaid-svg-ZdFFpmkY54Csvgaj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZdFFpmkY54Csvgaj .error-icon{fill:#552222;}#mermaid-svg-ZdFFpmkY54Csvgaj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZdFFpmkY54Csvgaj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZdFFpmkY54Csvgaj .marker.cross{stroke:#333333;}#mermaid-svg-ZdFFpmkY54Csvgaj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZdFFpmkY54Csvgaj p{margin:0;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge{stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 text{fill:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth--1{stroke-width:17;}#mermaid-svg-ZdFFpmkY54Csvgaj .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-0{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-0{stroke-width:14;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-1{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-1{stroke-width:11;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 text{fill:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-2{stroke-width:8;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-3{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-3{stroke-width:5;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-4{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-4{stroke-width:2;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-5{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-5{stroke-width:-1;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-6{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-6{stroke-width:-4;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-7{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-7{stroke-width:-7;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-8{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-8{stroke-width:-10;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-9{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-9{stroke-width:-13;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 polygon,#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 text{fill:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .node-icon-10{font-size:40px;color:black;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .edge-depth-10{stroke-width:-16;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled circle,#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:lightgray;}#mermaid-svg-ZdFFpmkY54Csvgaj .disabled text{fill:#efefef;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-root rect,#mermaid-svg-ZdFFpmkY54Csvgaj .section-root path,#mermaid-svg-ZdFFpmkY54Csvgaj .section-root circle,#mermaid-svg-ZdFFpmkY54Csvgaj .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-ZdFFpmkY54Csvgaj .section-root text{fill:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-root span{color:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .section-2 span{color:#ffffff;}#mermaid-svg-ZdFFpmkY54Csvgaj .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-ZdFFpmkY54Csvgaj .edge{fill:none;}#mermaid-svg-ZdFFpmkY54Csvgaj .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-ZdFFpmkY54Csvgaj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 计算机视觉
图像处理
滤波 增强 变换
特征提取
角点 边缘 描述子
目标检测
找到物体位置
图像分割
像素级分类
视频分析
跟踪 光流 背景减除
三维视觉
深度 标定 重建
1.2 什么是 OpenCV?
名字的含义
OpenCV = Open Source C omputer 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++ 实现,兼顾 易用性 和 运行效率。
python
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 |
python
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 重建 | 进阶 |
#mermaid-svg-lu7MOZp8Hj8EfLVt{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lu7MOZp8Hj8EfLVt .error-icon{fill:#552222;}#mermaid-svg-lu7MOZp8Hj8EfLVt .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lu7MOZp8Hj8EfLVt .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .marker.cross{stroke:#333333;}#mermaid-svg-lu7MOZp8Hj8EfLVt svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lu7MOZp8Hj8EfLVt p{margin:0;}#mermaid-svg-lu7MOZp8Hj8EfLVt .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .cluster-label text{fill:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .cluster-label span{color:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .cluster-label span p{background-color:transparent;}#mermaid-svg-lu7MOZp8Hj8EfLVt .label text,#mermaid-svg-lu7MOZp8Hj8EfLVt span{fill:#333;color:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .node rect,#mermaid-svg-lu7MOZp8Hj8EfLVt .node circle,#mermaid-svg-lu7MOZp8Hj8EfLVt .node ellipse,#mermaid-svg-lu7MOZp8Hj8EfLVt .node polygon,#mermaid-svg-lu7MOZp8Hj8EfLVt .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .rough-node .label text,#mermaid-svg-lu7MOZp8Hj8EfLVt .node .label text,#mermaid-svg-lu7MOZp8Hj8EfLVt .image-shape .label,#mermaid-svg-lu7MOZp8Hj8EfLVt .icon-shape .label{text-anchor:middle;}#mermaid-svg-lu7MOZp8Hj8EfLVt .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .rough-node .label,#mermaid-svg-lu7MOZp8Hj8EfLVt .node .label,#mermaid-svg-lu7MOZp8Hj8EfLVt .image-shape .label,#mermaid-svg-lu7MOZp8Hj8EfLVt .icon-shape .label{text-align:center;}#mermaid-svg-lu7MOZp8Hj8EfLVt .node.clickable{cursor:pointer;}#mermaid-svg-lu7MOZp8Hj8EfLVt .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .arrowheadPath{fill:#333333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lu7MOZp8Hj8EfLVt .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lu7MOZp8Hj8EfLVt .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lu7MOZp8Hj8EfLVt .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lu7MOZp8Hj8EfLVt .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .cluster text{fill:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt .cluster span{color:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lu7MOZp8Hj8EfLVt .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lu7MOZp8Hj8EfLVt rect.text{fill:none;stroke-width:0;}#mermaid-svg-lu7MOZp8Hj8EfLVt .icon-shape,#mermaid-svg-lu7MOZp8Hj8EfLVt .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lu7MOZp8Hj8EfLVt .icon-shape p,#mermaid-svg-lu7MOZp8Hj8EfLVt .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lu7MOZp8Hj8EfLVt .icon-shape .label rect,#mermaid-svg-lu7MOZp8Hj8EfLVt .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lu7MOZp8Hj8EfLVt .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lu7MOZp8Hj8EfLVt .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lu7MOZp8Hj8EfLVt :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} OpenCV
core 核心
imgproc 图像处理
highgui 界面
features2d 特征
video 视频分析
ml 机器学习
objdetect 目标检测
dnn 深度学习
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集:环境安装 → |