Python & 图像处理 教程

Python & 图像处理 教程
计算机视觉概述
【基础】基本概念和基本任务
1. 基本概念
2. 计算机视觉的基本任务
2.1 图像分类(Classification)
2.2 目标检测(Detection)
2.3 语义分割(Segmentation)
2.4 图像生成(Generation)
2.5 关键点定位(KeyPoint)
2.6 图像恢复(Restoration)
3. 一些典型的垂直应用
【基础】产业链和行业应用
1.计算机视觉的产业链构成
2. 计算机视觉的行业应用进展
应用领域
Python编程语言
第1章:Python数据类型
【基础】变量与常量
1. 创建变量不需要事先声明类型
2. 变量的赋值、比较
3. 先创建变量再使用变量
4. 变量赋值的四种方式
5. 理解变量赋值的背后
6. 什么是常量?
【基础】字符串
1. 在Python中如何定义字符串?
2. 对字符串的常用操作
【基础】整数 浮点数 复数
1. 整数(Int)
2. 浮点数(Float)
3. 复数(Complex)
4. 常用方法
【基础】布尔值:真与假
1. 什么是布尔值
2. 布尔类型的转换
3. 布尔运算
4. 空值:None
【基础】输入与输出
1. input 输入函数
2. print 输出函数
【基础】格式化输出
第一种方法:使用%
第二种方法:使用 format()
第三种方法:使用 f-string
【基础】Python运算符
1. 什么是运算符?
2. Python算术运算符
3. Python比较运算符
4. Python赋值运算符
5. Python位运算符
6. Python逻辑运算符
7. Python成员运算符
8. Python身份运算符
9. Python运算符优先级
第2章:Python数据结构
【基础】列表
1. 创建列表
2. 增删改查
查看元素
新增元素
修改元素
删除元素
3. 列表反转
4. 列表排序
【基础】元组
1. 创建元组
2. 增删改查
3. 元组与列表的转换
【基础】字典
1. 创建字典
2. 增删改查
查看元素
新增元素
修改元素
删除元素
3. 常用方法
判断 key 是否存在
【基础】集合
1. 创建集合
2. 增删改查
增加元素
删除元素
修改元素
查询元素
3. 集合运算
求合集
求差集
求交集
求不重合集
4. 集合判断
判断是否有某元素
判断两集合是否有相同元素
判断是否是子集
【基础】迭代器
1. 可迭代对象
2. 是否可迭代?
3. 可迭代协议
4. 什么是迭代器
5. 迭代器协议
【基础】生成器
1. 什么是生成器?
2. 如何创建生成器?
使用列表推导式
使用 yield
3. 生成器的使用
4. 生成器的激活
5. 生成器的状态
6. 生成器的异常
【基础】切片操作
1. Python可切片对象的索引方式
2. Python切片操作的一般方式
3. 举例
1. 切取单个值
2. 切取完整对象
3. start_index和end_index全为正(+)索引的情况
4.start_index和end_index全为负(-)索引的情况
5.start_index和end_index正(+)负(-)混合索引的情况
6.连续切片操作
7.切片操作的三个参数可以用表达式
8.其他对象的切片操作
5.Python常用切片操作
1.取偶数位置
2.取奇数位置
3.拷贝整个对象
4.修改单个元素
5.在某个位置插入元素
6.替换一部分元素
5.总结
第3章:Python流程控制
【基础】条件语句:if
1. 基本定义
2. 多条件语句
3. 判断的条件
4. 多个条件组合
【基础】循环语句:for
1. 普通循环
2. 带索引循环
3. break 中断
4. continue 下一循环
5. for - else 循环
【基础】循环语句:while
1. 普通的循环
2. 无限的循环
3. while - else 语句
【进阶】五种推导式
1. 列表推导式
2. 字典推导式
3. 集合推导式
4. 生成器推导式
5. 嵌套推导式
第4章:Python函数详解
【基础】函数创建与调用
1. 函数的创建
2. 函数的调用
4. 函数的返回
【进阶】装饰器的六种写法
Hello,装饰器
第一种:普通装饰器
第二种:带参数的函数装饰器
第三种:不带参数的类装饰器
第四种:带参数的类装饰器
第五种:使用偏函数与类实现装饰器
第六种:能装饰类的装饰器
【基础】11个案例讲解函数参数
1. 参数分类
2. 十一个案例
3. 传参需要注意的一点
【基础】匿名函数的使用
【基础】高阶函数
1. map 函数
2. filter 函数
3. reduce 函数
4. 注意
【基础】反射函数
1. 学习 Python 模块的入口
help()
dir()
2. 应用到实际开发中
type()
hasattr()
getattr()
id()
isinstance()
callable()
3. 模块(Modules)
_doc_
_name_
_file_
_dict_
4. 类(Class)
_doc_
_name_
dict
_module_
_bases_
【基础】偏函数
【进阶】泛型函数
【基础】变量的作用域
1. 作用域
2. 闭包
3. 改变作用域
4. 变量集合
【进阶】上下文管理器
1. 什么是上下文管理器?
2. 如何写上下文管理器?
3. 为什么需要上下文管理器?
4. 学会使用 contextlib
5. 好处
第5章:Python面向对象
【基础】类的理解与使用
1. 通俗理解类
2. 如何定义类?
3. 如何实例化?
4. 方法的调用
【进阶】神奇的元类编程(metaclass)
1. 类是如何产生的
2. 如何使用type创建类
3. 理解什么是元类
4. 使用元类的意义
5. 元类实战:ORM
6. _new_ 有什么用?
附录:参考文章
【进阶】深藏不露的描述符(Descriptor)
1. 为什么要使用描述符?
2. 描述符的访问规则
3. 基于描述符如何实现property
4. 基于描述符如何实现staticmethod
5. 基于描述符如何实现classmethod
6. 所有实例共享描述符
参考文档
【基础】静态方法与类方法
1. 写法上的差异
2. 方法与函数区别
【基础】私有变量与私有方法
1. 下划线妙用
2. 单前导下划线 _var
3. 双前导下划线 __var
4. 总结一下
【基础】类的封装
【基础】类的继承
1. 单继承
2. 多继承
3. 继承顺序
4. MRO 算法
使用 mro 查询
使用 merge 推导
附录:参考文章
【基础】类的多态
【基础】类的 property 属性
【进阶】类的 Mixin 设计模式
1. 认识Mixin模式
2. 不使用Mixin的弊端
【进阶】类的魔术方法(超全整理)
01. 构造方法
02. 操作符
2.1 比较操作符
2.2 数值操作符
一元操作符
常见算数操作符
反射算数运算符
增强赋值运算符
类型转换操作符
03. 类的表示
04. 访问控制
05. 自定义序列
5.1 容器背后的魔法方法
5.2 一个例子
06. 反射
07. 抽象基类
08. 可调用的对象
09. 上下文管理器
10. 创建描述符对象
11. 拷贝
12. Pickling
12.1 小试牛刀
12.2 Pickle你的对象
12.3 一个例子
13. 总结在最后
第6章:Python包与模块
【基础】什么是包、模块和库?
1. 模块
2. 包
3. 库
【进阶】理解查找器与加载器
1. 查找器是什么?
2. 加载器是什么?
3. 模块规格说明
4. 导入器是什么?
【进阶】实现远程导入模块
1. 动手实现导入器
2. 搭建远程服务端
【基础】分发工具:distutils和setuptools
1. 包分发的始祖:distutils
2. 分发工具升级:setuptools
【基础】源码包与二进制包有什么区别?
【基础】eggs与wheels 有什么区别?
【进阶】超详细讲解 setup.py 的编写
1. setup.py 的编写
2. 使用 setup.py 安装包
【进阶】打包辅助神器 PBR 是什么?
【进阶】开源自己的包到 PYPI 上
【基础】安装第三方包的八种方法
1. 使用 easy_install
2. 使用 pip install
3. 使用 pipx
4. 使用 setup.py
5. 使用 yum
6. 使用 pipenv
7. 使用 poetry
8. 使用 curl + 管道
【基础】导入单元的构成
【基础】导入包的标准写法
【进阶】常规包与空间命名包
1. 常规包
2. 命名空间包
3. 空间命名包的好处
【进阶】花式导包的八种方法
1. 直接 import
2. 使用 _import_
3. 使用 importlib 模块
4. 使用 imp 模块
5. 使用 execfile
6. 使用 exec 执行
7. import_from_github_com
8. 远程导入模块
【进阶】包导入的三个冷门知识点
1. 使用 _all_ 控制可被导入的变量
2. 命名空间包的神奇之处
3. 模块重载中的一个坑
【基础】pip 的超全使用指南
1. 查询软件包
2. 下载软件包
3. 安装软件包
3.1 只从本地安装,而不从 pypi 安装
3.2 限定版本进行软件包安装
3.3 限制不使用二进制包安装
3.4 指定代理服务器安装
3.5 安装用户私有软件包
3.6 延长超时时间
4. 卸载软件包
5. 升级软件包
6. 配置文件
【进阶】理解模块的缓存
图像处理教程
第1章:图像基本操作
【基础】图像的读取与显示
【基础】视频的读取与显示
【基础】数字图像的概念和分类
1. 什么是数字图像
2. 什么是像素
3. 图像的三种类型
4. 什么是图像通道
【基础】感兴趣区域ROI
【基础】通道分离与合并
【基础】numerical calculation
第2章:图像阈值处理
【定义】什么是阈值处理
【基础】基础的图像阈值处理
1. 阈值处理函数
2. 阈值二值化(Threshold Binary)
3. 阈值反二值化(Threshold Binary Inverted)
4. 截断(Truncate)
5. 阈值取零(Threshold To Zero)
6. 阈值反取零(Threshold To Zero Inverted)
7. 程序演示
【进阶】自适应阈值处理
1. 引入
2. 自适应阈值处理函数
3. 程序演示
【进阶】Otsu处理
1. 引入
2. Otsu阈值分割实现
第3章:图像平滑处理
【定义】什么是平滑处理
1. 定义
2. 平滑处理的基本思想
【基础】三种基础的滤波方式
1. 均值滤波
基本原理
均值滤波函数
程序演示
2. 高斯滤波
基本原理
高斯滤波函数
程序演示
3. 中值滤波
基本原理
中值滤波函数
程序演示
4. 总结对比
【基础】2D卷积
1. 引入
2. filter2D函数
3. 程序演示
第4章:图像形态学处理
【定义】形态学操作
【基础】腐蚀与膨胀
1. 腐蚀
腐蚀操作
程序演示
2. 膨胀
膨胀操作
程序演示
【基础】开运算与闭运算
1. 开运算
2. 闭运算
【基础】形态学梯度运算
【基础】礼帽运算与黑帽运算
1. 礼帽运算
2. 黑帽运算
第5章:图像边缘检测
【基础】边缘检测概述
【进阶】基于一阶导数的~
1. Roberts 算法
2. Prewitt算法
3. Sobel算法
【进阶】基于二阶导数的~
1. Laplacian算法
【进阶】Canny边缘检测
1. Canny边缘检测的步骤
1.高斯滤波降噪
2.计算梯度
3. 非极大值抑制
4.双阈值确定边缘
2.Canny函数及使用
1. Canny函数
2. 程序演示
第6章:图像轮廓提取
【进阶】图像轮廓提取
1. 什么是图像轮廓?
2. 函数实现
【进阶】外接矩形、面积和周长
1. 轮廓外接矩形
1.1 外接正矩形
1.2 外接最小矩形
2. 轮廓面积
3. 轮廓周长
第7章:直方图及其均衡化
【基础】直方图
1. 什么是直方图
2. 直方图的意义
3. 直观理解
4. 使用pyplot绘制直方图
5. 使用OpenCV绘制直方图
1. 使用cv2.calcHist()函数统计图像直方图信息
2. plot()函数的使用
3.绘制彩色图像直方图
【基础】直方图均衡化
1. 什么是直方图的均衡化?
2. openCV实现直方图均衡化
3. 直方图自适应均衡化
【基础】pyplot模块
1. subplot函数
2. imshow函数
第8章:图像金字塔
【基础】图像金字塔的概念
1. 图像金字塔是什么?
2. 理论基础
下采样
上采样
小结
【基础】图像金字塔操作
1. pyrDown函数
程序演示
2. pyrUp函数
程序演示
第9章:图像模板匹配
【基础】模板匹配
1. 什么是模板匹配
2. 模板匹配原理
3. 程序演示
第10章:霍夫变换
【定义】霍夫变换
【进阶】霍夫直线变换
1.原理
2.霍夫直线变换实现
3. 概率霍夫变换实现
【进阶】霍夫圆变换
第11章:绘图与交互
【定义】绘图与交互概述
【基础】绘图基础
1. 绘制直线
2. 绘制矩形
3. 绘制圆形
4. 绘制椭圆
5. 绘制多边形
6. 绘制文字
【基础】鼠标交互
【基础】滚动条
案例一:用滚动条实现调色板
案例二:用滚动条控制阈值处理参数
案例三:用滚动条控制均值滤波滤波核大小
第12章:视频处理
【基础】视频处理
【基础】VideoCapture类
1). 初始化
2).cv2.VideoCapture.open()函数和cv2.VideoCapture.isOpened()函数
3). 捕获帧
4). 释放
5). 属性设置
6). cv2.VideoCapture.grab()函数和cv2.VideoCapture.retrieve()函数
捕获摄像头视频
播放视频文件
【基础】 VideoWriter类
1. 构造函数
2. write函数
3. 释放
第13章:背景建模
【基础】背景建模基本原理
1.帧差法
2.混合高斯模型
混合高斯模型学习方法
混合高斯模型测试方法
【进阶】程序展示
第14章:傅里叶变换
【基础】
1.什么是频域
2.傅里叶变换原理
【基础】openCV实现傅里叶变换
1.傅里叶变换
2.逆傅里叶变换
【基础】低通滤波与高通滤波
1.低通滤波
程序演示
2.高通滤波
程序演示
第15章:光流估计
【基础】介绍
【基础】原理
Lucas-Kanade算法
【基础】openCV实现光流估计
1.Lucas-Kanade方法进行光流估计
cv2.calcOpticalFlowPyrLK(prevlmage, nextlmage, prevPts, None,winSize,maxLevel)
2.角点检测方法
cv2.goodFeaturesToTrack(img, mask=None, maxCorners, qualityLevel, minDistance)
3.程序演示
第16章:图像拼接
【基础】图像拼接简介
1.图像拼接的分类
2.基于区域相关拼接算法
3.基于特征相关拼接算法
【基础】图像拼接的基本步骤
【基础】图像拼接的原理
1.特征匹配
2.计算图像之间的变换结构
3.图像配准
4.图像变形
5.图像融合
【基础】程序展示
结果展示
第17章:图像特征匹配
【基础】角点检测
1.角点检测算法基本思想
例如
2.OpenCV来实现Harris角点检测
3.程序演示
【基础】特征点检测
1.什么是特征点
2.SIFT特征点检测
3.openCV实现SIFT
4.程序演示
【基础】特征匹配
1.openCV实现Brute-Force 蛮力匹配
2.程序演示
案例展示
案例展示
【案例】基于透视变换的答题卡正确率识别
【案例】基于模板匹配的银行卡识别
about me
关于我