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

投了个实习要求手动实现这个功能,去看了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 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)
作者:又又酸又菜又多余原文地址:https://blog.csdn.net/qq_43470698/article/details/128025102

%s 个评论

要回复文章请先登录注册