投了个实习要求手动实现这个功能,去看了numpy.flip源码简化了一下。。
首先读入图像是shape(row,column,channel)的array数组
例如实例中输入的
img=np.array([[[0, 0, 0],[1,1,1]],[[2,2,2],[3,3,3]]])
实际上是形如下下图的RGB三维数组
水平翻转:
垂直翻转:
这里我们使用np.s_[:]方法
slice(start,end,step)指的是索引从start到end,间隔为step
np.s_[::-1]指的是倒序排列
因为我们普通图像数组是img.ndim维数组,所以设置index = [np.s_[:]]*img.ndim
三个slice分别对应于每一层数组。
import cv2import numpy as npdef flip(img,axis):index = [np.s_[:]]*img.ndimindex[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)