给定一张图片,如何在不使用PIL、OpenCV这些库的情况下,单独使用Numpy库实现图片旋转。
“talk is easy, show me the code!”
常见旋转有:上下翻转、左右翻转、旋转180度、逆时针旋转90度、顺时针旋转90度。
(1)上下翻转
图片沿着图片中心的水平线,上下翻转,第一行调换到倒数第一行,第二行调换到倒数第二行,以此类推。
python实现:
# 上下翻转 = 颠倒各个行的顺序
arr_up = arr[::-1, ...] # 这一行等价于arr[::-1]
(2)左右翻转
图片沿着图片中心的垂直线,左右翻转,第一列调换到倒数第一列,第二列调换到倒数第二列,以此类推。
python实现:
# 左右翻转 = 颠倒各个列的顺序
arr_lr = arr[:, ::-1]
(3)旋转180度
以图片中心点为原点,顺时针或者逆时旋转180度,左上角元素换到右下角,左下角元素换到右上角。
python实现:
# 旋转180度 = 先上下翻转再左右翻转,或者先左右翻转再上下翻转
arr_180 = arr[::-1, ...][:, ::-1]
(4)逆时针旋转90度
以图片中心为旋转原点,第一行换到第一列,最后一行换到最后一列。
python实现:
# 逆时针旋转90度 = 等价于矩阵的转置 + 上下翻转
arr_n90 = np.transpose(arr, axes=(1, 0, 2))[::-1, ...]
(5)顺时针旋转90度
以图片中心为旋转中心,第一列换到最后一列,最后一列换到第一列。
python实现:
# 顺时针旋转90 = 等价于先旋转180度,再逆时针旋转90度
arr_s90 = np.transpose(arr[::-1, ...][:, ::-1], axes=(1, 0, 2))[::-1, ...]
以汽车为例,各个旋转的效果如下:
如果需要完整python代码,可以添加微信公众号:kelly学技术,回复:图像旋转
--over --