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