如何在python opencv中水平交换图像的两半

Osi*_*Osi 7 python opencv

我找不到有关如何执行此操作的任何现有答案,因此我已经编写了自己的代码,如下所示。这可能不是最快的方法,但效果很好。

Mas*_*oud 4

numpy.roll()可用于在任意轴上循环移动数组。例如,对于一维数组,它可以用作:

import numpy as np

arr = np.array(range(10)) 
#  arr = [0 1 2 3 4 5 6 7 8 9]
arr_2 = np.roll(arr, len(arr)//2)
#  arr_2 = [5 6 7 8 9 0 1 2 3 4]
Run Code Online (Sandbox Code Playgroud)

可以使用相同的方法水平交换两半图像:

import cv2
import numpy as np

img = cv2.imread('Figure.png', 0)
img = np.roll(img, img.shape[1]//2, axis = 1)
Run Code Online (Sandbox Code Playgroud)

用于垂直交换,np.roll(img, img.shape[0]//2, axis = 0).