提出需求
用 Python 对图片做旋转、镜像操作时,小伙伴们可能首先想到的是 PIL 、Opencv 等图像处理程序包,只需要一行代码就可以实现目标转换。
这样做的确能够实预期目标,但图像是怎么实现旋转的,这个过程对我们来说就像一个黑盒子,很陌生,为了了解图像变换机制,这篇文章借助 Numpy 数组来实现图像翻转等操作
原理讲解
一张图片的本质是由 a(长) × b(宽) 与图像一样大小的矩阵的像素值组成的,一张照片的呈现因为两点:1,图像中各像素值不一样;2,图像中的像素不是随机排列,需要遵从某种固定的排列方式。
一般常见到的 角度旋转、水平镜像图像变换实质上就是图像的排列方式不同 , 如果想实现相应功能需要做的就是把原有排列方式的图像像素拼接成一种新的排列方式
为了方便大家理解,特地画了两张图用于展示图像变换的基本原理( 字母 A-I表示像素 ),
下面这张图表示的是水平旋转 90度的过程,(本质就是像素点位置的移动,其值不变)
下面这张图表示图像水平镜像转换过程,原理图:
旋转180度整个思路就是把角对角像素进行替换:原理图:
代码实操
展示原图
上面知道图像变换原理,接下来就是代码实现了,要用数组实现转换功能, Numpy 程序包自然是主要工具,首先要做的是读取图像,再借助于函数 numpy.asarray() 把图像转