第一章节 概念基础
一、入门
1. 计算机视觉 · 定义
按照一定的算法,让计算机获得类似于人类视觉的能力;
不仅仅“视”(看到),更重要的是实现“觉”(信息分析)
2. Marr 的视觉计算理论
计算机视觉工程的先驱者
3. 三个阶段
A. , 将输入的原始图像进行处理,抽取图像中诸如角点、边缘、纹理、线条、边界等基本特征,这些特征的集合称为基元图(primitive sketch);
B. 在以观测者为中心的坐标系中,由输入图像和基元图恢复场景可见部分的深度、法线方向、轮廓等,这些信息的包含了深度信息,但不是真正的物体三维表示,因此,称为二维半图(2.5 dimensional sketch)
C. 在以物体为中心的坐标系中,由输入图像、基元图、二维半图来恢复、表示和识别三维物体(综合运用,进入三维时代)
二、图像基础
1. 模拟图像
由实际图像“拍摄”出来的【像素图】,是对实际图像的模拟
此过程也可称为离散化
2. 计算机图像
原点方向或产生变化
3. 三原色
红绿蓝RBG(Matplotlib库导入顺序,而OpenCV库恰好反过来)
4. 像素邻域
5. 像素距离
6. 部署Python环境,配置CV2和Matplotliv库
《关于我摸鱼一天后搞定PyCharm这件事》Python环境配置_影月丶暮风的博客-CSDN博客
7. 常见图像保存方式
float64 uint8 是两种常见的方式,二者之间可以相互转化
float范围在0~1 uint在0~255
OpenCV 图像导入测试
"""
显示图像(OpenCV)
"""
import cv2
# CV2是 BGR读入,显示也是BGR
# matplotlib是RBG显示,使用要记得反相
t1 = cv2.imread("HF.jpg", 1) # 读入图片(按照BGR格式)
# 处理形式写0是【灰度读取】,不写或写1 为【彩色读取】(图像地址不可是中文)
# cv2.namedWindow("Image_Test") # 创建窗口
cv2.imshow("Image_Test", t1) # 显示图像
if cv2.waitKey() == 27: # 等待摁下 esc键后销毁窗口
cv2.destroyAllWindows()
Matplotlab 与 CV2 的互动
"""
显示图像(matplotlib)
"""
# 导入模块
import cv2
import matplotlib.pyplot as plt
# 读取图像
T1 = cv2.imread("HF.jpg")
# 直接使用 Matplotlib 显示图像 (显示异常) cv导入为BGR顺序
plt.imshow(T1) # matplotlib是 RGB顺序
plt.show()
# 将颜色通道从 BGR 转换为 RGB
# T1 = T1[:, :, ::-1] # 方法一
T1 = cv2.cvtColor(T1, cv2.COLOR_BGR2RGB) # 方法二
# 使用 Matplotlib 显示图像
plt.imshow(T1)
plt.show()
8. 关于滤波核:越大越能去除噪点,但是会牺牲清晰度;越小越清晰,但是无法消除噪点
所以太大太小都不是好的,应该适中;另外,滤波核喜欢取得奇数个数的像素点.
第二章节 图像边缘与角点检测
一、图像文件结构
1. 位图
由像素构成,分为8 16 24bit三种位型,分别为256色 65536色 2^24色
来表示一个像素点,越高位数能表示的色彩也就越丰富,相应地会更占内存
A. BMP文件由文件头、位图信息头、颜色信息和图像数据四部分组成
文件头主要包含文件的大小、文件类型、图像数据偏离文件头的长度等信息;
位图信息头包含图象的尺寸信息、图像用几个比特数值来表示一个像素、图像是否
压缩、图像所用的颜色数等信息
颜色信息包含图像所用到的颜色表,显示图像时需用到这个颜色表来生成调色板,
但如果图像为真彩色呢?
图像数据表示图像的相应的像素值。
B. 图像的像素值在文件中的存放顺序为从左到右,从下到上
C. 文件存储图像的每一行像素值时,如果存储该行像素值所占的字节数为4 的倍数
则正常存储,否则,需要在后端补0 ,凑足4的倍数
D. JPGE和GIF 都是 有损压缩
jpge常见三种:标准型,渐进型,JPGE2000
(从上到下加载显示,从模糊到清晰显示,更好的压缩避免异常显示)
这是我老婆!
2. 图像预处理
A. 模糊化
用于消除噪声(白点); 常见三种方法:均值滤波、中值滤波、高斯滤波
本质上都是取得一定区域的像素块,合成一个新的像素块来代替一块