工欲善其事必先利其器!这是CVHub公众号的第十篇原创文章,也是《学术小白也能看懂的学术进阶专栏》(计算机视觉方向)的第十篇文章!
本章将介绍计算机视觉与深度学习需用到的Python基础数据结构以及一些常用图像处理库。
Python基础数据结构
1.1 列表
Python列表可以存储任意数据类型(包括int型数据,float型数据,字符,字符串,bool,列表,元组,字典):
1.2 元组
Python元组同样可以存储任意数据类型(与List一样);但其与List唯一不同的是元组内的值不可更改,而List的值可以更改
1.3 集合
Python集合可以使用大括号{ }或set( )函数创建,注意:创建一个空集合必须用set ( )而不是{ },因为{ }是用来创建一个空字典;集合的作用是去重
1.4 字典
Python字典遵循“键-值”(key-value)映射结构,键无重复,一个键不能对应多个值,不过多个键可以指向一个值;key可以是int, float, 字符,或者字符串,value可以是任意数据类型
常用第三方库
2.1 Numpy
Numpy是第三方Python包,利用Numpy,我们可以很方便的对高维数组进行操作!下面,我将以一张图片为例,利用Numpy数组对图片进行操作!
2.1.1 读取并显示一张图片
我们常见的图像,不管它是什么格式,bmp, jpg, png,还是tiff。其存储在电脑都是一堆数字,所以我们对图像进行处理,其实就是对这些数字进行变换,得到我们想要的视觉效果!
而我们常见的彩色图像一般由三个通道组成(RGB三通道),灰度图像则由一个通道组成;所以我们可以对一张图片通过相关工具(如matplotlib,cv2等)将图像转换为数字矩阵(一般有三个维度:height,width和channel),然后我们对该数字矩阵运用相关的数字图像处理算法(例如滤波,形态学,检测算子,二值化等)就可以实现图像的数据增强:对比度增强,图像模糊,锐化,亮度增强等
2.1.2 利用Numpy对图片进行基本操作
<1>. 图像数据简单统计
<2>. 分离各通道图像
<3>. 将图片翻转
<4>. 图片切半
<5>. 图片拼接
<6>. 将多张图片拼入一个batch
2.2 Opencv
Opencv是著名的开源计算机视觉库,其底层由C/C++编写,但它提供C++/C/Python和Java接口。Opencv涵盖了经典和最先进的数字图像处理算法,计算机视觉和机器学习算法;这些算法可广泛用于检测和识别人脸,识别对象,区分视频中人的动作,跟踪相机移动,跟踪移动物体,提取物体3D模型,从立体相机生成3D点云、将图像拼接在一起以产生整个场景的高分辨率图像、从图像数据库中找到相似的图像、从使用闪光灯拍摄的图像中去除红眼、跟踪眼球运动、识别景物并建立标记以将其与增强现实等叠加!
下面,我将以数字图像处理为例,介绍Opencv在图像处理领域的用法:几何变换(Geometric Transformations)
颜色空间变换(Color Space)
旋转/反射变换(Rotation/Reflection)
噪声注入(Noise Injection)
内核过滤器(Kernel Filters)
混合图像(Mix)
随机擦除(Random Erasing)
缩放变换(Zoom)
移动(Translation)
翻转变换(Flipping)
裁剪(Cropping)
以下为例举几种较常见的图像处理方法:
2.2.1 灰度图,二值化,模糊,对比度,边缘提取
2.2.2 图像缩放,翻转,噪声,混合
2.2.3 图像仿射变换仿射变换原理与Python实现:仿射变换其实就是将某个向量空间线性变换到另一个向量空间的过程:二维坐标(x,y)到二维坐标(u,v)的线性变换,其数学表达式如下: 其对应的齐次坐标矩阵表示形式为: Python对图像实现仿射变换方法如下:
Opencv调用仿射变换函数:当然!Opencv有内置的函数warpAffine实现了仿射变换,不需要我们手动实现!我们只需要提供一个仿射变换矩阵即可实现对图片的仿射变换(包括旋转,放大,缩小都可以做到)而且速度还很快! 2.2.4 总结Opencv可用于开发实时的图像处理,计算机视觉以及模式识别程序!是运用最广泛的计算机视觉库。不仅提供了对2D图像进行图像处理的高级API(比如滤波,形态学,检测算子,直方图统计处理等等),特征点检测与匹配,目标检测等等
还提供了对视频进行处理分析的功能(比如光流法和目标跟踪等)
此外,也内置了3D领域的立体视觉和相机标定等功能
大家如果感兴趣,可以研究研究!2.3 其它图像数据处理库在计算机视觉 / 图像处理 领域,Opencv是目前功能最多最全,也是运用最广泛的图像处理库了;除了Opencv,还有一些其它的图像处理库也很常用,比如:2.3.1 Matplotlib介绍:Matplotlib是Python 2D-绘图领域使用最广泛的Python第三方库,它常用于数据的可视化,以及图形制作。下面将例举几种常见的绘图方法:2.3.1.1 线图
2.3.1.2 直方图
2.3.1.3 三维绘图
2.3.1.4 饼状图
2.3.1.5 散点图
2.3.1.6 条形图
至于绘制以上图的源代码,大家可以上官网查看,附上链接:
https://matplotlib.org/tutorials/introductory/sample_plots.html#legends
2.3.2 Scikit-image
介绍:Skimage也是Python第三方图像处理库,它常用于数据可视化和数字图像处理,同时也可用来处理视频文件!
2.3.3 Pillow
介绍:Pillow是Python平台的图像处理标准库,常用于数据可视化和数字图像处理;相比于Opencv,其API简单易用,更加亲民:只需少量代码,便可完成对图像的高级处理操作!
2.3.4 其它
除了以上几种常见的Python图像处理工具,以下几种工具也很实用!Scipy,SimpleCV,Mahotas,SimpleTK,Pgmagick,Pycairo!
交流渠道微信群(长按加入):