【发布时间】:2017-08-14 18:34:07
【问题描述】:
OpenCV 使用 BGR 编码,img[...,::-1] 交换 img 的红轴和蓝轴,以便图像需要采用更常见的 RGB。我已经使用它几个月了,但仍然不明白它是如何工作的。
【问题讨论】:
-
相当肯定 opencv 使用 numpy arrays 来表示图像:椭圆是在该上下文中 fit 的任何轴的简写 -
::-1反转 2 中的行-d 数组。
OpenCV 使用 BGR 编码,img[...,::-1] 交换 img 的红轴和蓝轴,以便图像需要采用更常见的 RGB。我已经使用它几个月了,但仍然不明白它是如何工作的。
【问题讨论】:
::-1 反转 2 中的行-d 数组。
切片运算符与 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]。
由于问题并不完全清楚,我希望这可以清除功能并使您得到答案。
【讨论】:
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] 相同
【讨论】: