[...,:: - 1]如何在切片表示法中工作?

时间:2017-08-14 18:34:08

标签: python opencv slice

OpenCV使用BGR编码,img[...,::-1]交换img的红轴和蓝轴,以便在图像需要更常见的RGB时。我已经使用了几个月了,但仍然不明白它是如何工作的。

2 个答案:

答案 0 :(得分:1)

切片运算符与3个参数一样工作。开始(包括),结束(独占)和步骤。 如果未指定start,则它将获取数组的开头,与结束相同,但使用最后一个元素。如果未指定步骤,则默认值为1.

这样,如果您执行[1, 2, 3, 4][0:2],则会返回[1, 2]

如果您执行[1, 2, 3, 4][1:],则会返回[2, 3, 4]

如果您执行[1, 2, 3, 4][1::2],则会返回[2, 4]

对于负索引,这意味着向后迭代,[1, 2, 3, 4][::-1]说,从起始元素到最后一个元素一次向后迭代1个元素,返回[4, 3, 2, 1]

由于问题不完全清楚,我希望这可以清除功能并让你得到答案。

答案 1 :(得分:1)

img[...,::-1]颠倒了图像的3个R,G,B分量的顺序

这是一个数值例子

import numpy as np

#define  2x2x3 matrix with random numbers
A = np.random.randint(0,10,(2,2,3))
print(A)
#output
array([[[0, 1, 7],
       [9, 6, 6]],

       [[8, 2, 2],
       [7, 9, 4]]])
#print the third 2x2 component of A (corresponding to B in RGB)
print(A[:,:,2]
#output is 
array([[7, 6],
      [2, 4]])

现在反转矩阵的第三维会将0(R)与2(B)交换并保持1(G)不变

RA =A[:,:,::-1]

print(RA)
#output is 
array([[[7, 1, 0],
       [6, 6, 9]],

       [[2, 2, 8],
       [4, 9, 7]]])

#here is the first
print(RA[:,:,0])
#output is as expected the same as A[:,:,2], i.e. R and B were swapped
array([[7, 6],
      [2, 4]])

PS。 [:,:,1][...,1]

相同