【问题标题】:How does [...,::-1] work in slice notation?[...,::-1] 如何在切片符号中工作?
【发布时间】:2017-08-14 18:34:07
【问题描述】:

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

【问题讨论】:

标签: python opencv slice


【解决方案1】:

切片运算符与 3 个参数一起工作。开始(包括)、结束(不包括)和步骤。 如果未指定 start,则它获取数组的开头,与 end 相同,但与最后一个元素相同。如果未指定步长,则默认为 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]

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

【讨论】:

    【解决方案2】:

    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] 相同

    【讨论】:

      猜你喜欢
      • 2016-09-12
      • 2017-11-07
      • 2011-04-25
      • 2012-02-10
      • 2019-08-30
      • 1970-01-01
      • 2010-10-05
      相关资源
      最近更新 更多