python手动实现图像水平、垂直翻转

投了个实习要求手动实现这个功能,去看了numpy.flip源码简化了一下。。

首先读入图像是shape(row,column,channel)的array数组
例如实例中输入的

img=np.array([[[0, 0, 0],[1,1,1]],[[2,2,2],[3,3,3]]])

实际上是形如下下图的RGB三维数组
python手动实现图像水平、垂直翻转_第1张图片
水平翻转:
python手动实现图像水平、垂直翻转_第2张图片
垂直翻转:
python手动实现图像水平、垂直翻转_第3张图片
这里我们使用np.s_[:]方法
在这里插入图片描述
slice(start,end,step)指的是索引从start到end,间隔为step
np.s_[::-1]指的是倒序排列
因为我们普通图像数组是img.ndim维数组,所以设置index = [np.s_[:]]*img.ndim
三个slice分别对应于每一层数组。

import cv2
import numpy as np

def flip(img,axis):
    index = [np.s_[:]]*img.ndim
    index[axis] = np.s_[::-1]
    index = tuple(index)
    return img[index]


if __name__ == "__main__":
    img=cv2.imread("coins.jpg")
    # img=np.array([[[0, 0, 0],[1,1,1]],[[2,2,2],[3,3,3]]])
    cv2.imshow("img",img)
    #axis=0水平翻转
    #axis=1垂直翻转
    cv2.imshow("flip",flip(img,2))
    # print(flip(img,0))
    # print(flip(img,1))

    cv2.waitKey(0)

你可能感兴趣的:(python,numpy)