绪言
咩哈哈哈哈哈,大家好呀,这里是一名已经放弃了ACM的中山大学大二学生。随着对智科的学习,对计算机视觉这一块也是越来越有兴趣了,目前学习的是基于Python的opencv3的计算机视觉学习,这一篇属于一个总览吧。基于的书为《OpenCV3计算机视觉Python语言实现》第二版,但是不得不说,这本书错误真的不少……而且代码好像是没有实测过的,得手动调一下bug。
OpenCV3简介
OpenCV是一个英特尔公司开发的计算机视觉库,其特点在于开源,封装程度高,易操作。
计算机视觉图片存储简介
数字图像,在计算机中是采用矩阵(Matrix)的形式进行存储的,每一张图像的每个像素点都会有一个矩阵进行存储颜色信息(比如采用RGB格式的,就会在每一个像素点放置一个3*1的矩阵)比如,我要创建一张3*3的8位图像,其语句如下:
img=numpy.zeros((3,3),dtype=numpy.uint8)
或者
img=numpy.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
但后者一般用于卷积核的创建,卷积的概念将会在后面介绍高斯滤波器时说到。
对其进行print操作,可得:
[[0 0 0]
[0 0 0]
[0 0 0]]
这是一个8位图像,而我们知道,一张RGB图像应有24位(RGB三色各有8位),因此,我们可以用颜色转换函数cvtColor来进行转换:
img=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
该函数的第一个参数是原图像文件,opencv的图像处理函数特点为,多数的图像处理函数都会直接覆盖掉原图像,不需要做备份(否则缓存区很容易爆掉)。第二个参数为设置位,cv2.COLOR_GRAY2BGR即为将灰度图转化为三原色彩色图像。
图像处理初步
通道
通道的定义
现在我们来了解一下通道的概念,我们知道,灰度图中只有一种原色:黑,对应一个颜色通道;而BGR三原色有三种基本色,因此对应三个通道。我们使用numpy创建图像矩阵时,是创立了一个有3*3的矩阵。而转换成BGR后,我们可以print一下新的图像来看看:
[[[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]