【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知

【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知

标签OpenCV 计算机视觉 图像处理 Python CV入门

难度 :⭐ 入门 | 阅读时长 :约 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 知识自测

  1. 用自己的话解释「计算机视觉」和「图像处理」的区别。
  2. OpenCV 中纯红色像素的 BGR 值是多少?
  3. 一张 1920×1080 的彩色图,NumPy 数组 shape 是什么?
  4. 判断:OpenCV 只能使用 C++ 开发。( )

📎 参考答案

  1. (0, 0, 255) --- BGR 顺序
  2. (1080, 1920, 3) --- 高×宽×通道
  3. ✗ --- 支持 Python、Java 等多种语言

1.9 本集小结

概念 要点
计算机视觉 让机器理解图像/视频
OpenCV 开源跨平台 CV 库,2000+ 算法
像素 图像最小单元,0~255
BGR OpenCV 默认颜色顺序
NumPy 图像在内存中的表示

上一集 下一集
系列首页 第02集:环境安装 →

参考:OpenCV中文官方文档 | OpenCVTutorials

相关推荐
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(62):DCM-Agent——用双簇记忆化解优化问题的多范式冲突
论文阅读·人工智能·学习·开源·github
xian_wwq1 小时前
【学习笔记】深度认知系列-第13讲AI Agent时代到来——从“回答问题”到“执行任务”
人工智能·笔记·学习
程序员cxuan1 小时前
GPT - 6 Astra 的使用焚诀
人工智能·后端·程序员
golang学习记1 小时前
Cursor Origin:Cursor要造一个AI时代的Github
人工智能·github·cursor
HugoStudio_SWAN1 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
一马平川的大草原2 小时前
如何实现SVG转Mermaid图
python·svg·格式转换·mermaid
yyk333242 小时前
计算机识别中的人脸检测
人工智能·计算机视觉
PFFstronger2 小时前
基于 Dify 知识库 + Ollama 大模型,自动生成测试用例并导出 XMind 的完整方案
人工智能·python·测试用例·xmind
文心快码BaiduComate2 小时前
从“代码补全”到“自主交付”:文心快码全私有化部署落地中信百信银行核心研发链路
人工智能·程序员·文心快码