我正在研究如何将通道从 BGR 更改为 RGB,结果出现了这个问题。这可行,但我对这种语法感到困惑。这种类型的数据交换在 numpy 中到底是如何工作的?
要点代码:
rgb = bgr[...,::-1]
Run Code Online (Sandbox Code Playgroud)
我不是 Numpy 及其操作名称的专家,但我可以向您展示如何使用各种切片(索引?)技术来进行一些图像处理。
一般来说,在 RGB 图像上,操作以逗号分隔,如下所示:
newImage = oldImage[ROWSTUFF, COLUMNSTUFF, CHANNELSTUFF]
Run Code Online (Sandbox Code Playgroud)
其中 ROWSTUFF、COLUMNSTUFF 和 CHANNELSTUFF 分别由以下部分组成:
start:end:step
Run Code Online (Sandbox Code Playgroud)
那么,让我们对这张图像进行一些处理:
# Load image with PIL/Pillow and make Numpy array - you can equally use OpenCV imread(), or other libraries
im = np.array(Image.open('start.png').convert('RGB'))
# im.shape is (400, 400, 3)
Run Code Online (Sandbox Code Playgroud)
# Now extract top half by ending ROWSTUFF at 200
tophalf = im[:200,:,:]
Run Code Online (Sandbox Code Playgroud)
# Now extract bottom half by starting ROWSTUFF at 200
bottomhalf = im[200:,:,:]
Run Code Online (Sandbox Code Playgroud)
# Now extract left half by ending ROWSTUFF at 200
lefthalf = im[:,:200,:]
Run Code Online (Sandbox Code Playgroud)
# Now extract right half by starting ROWSTUFF at 200
righthalf = im[:,200:,:]
Run Code Online (Sandbox Code Playgroud)
# Now scale the image by taking only every 4th row and every second column:
scaled = im[::4,::2,:]
Run Code Online (Sandbox Code Playgroud)
# Now extract Red channel, by setting CHANNELSTUFF to 0
red = im[:,:,0]
Run Code Online (Sandbox Code Playgroud)
# Now extract Green channel, by setting CHANNELSTUFF to 1
green = im[:,:,1]
Run Code Online (Sandbox Code Playgroud)
# Now flop the image top to bottom by striding backwards through ROWSTUFF
flop = im[::-1,:,:]
Run Code Online (Sandbox Code Playgroud)
# Now flip the image left to right by striding backwards through COLUMNSTUFF
flip = im[:,::-1,:]
Run Code Online (Sandbox Code Playgroud)
# And finally, like the question, reverse the channels by striding through CHANNELSTUFF backwards, which will make RGB -> BGR, thereby leaving Green and black unchanged
OP = im[:,:,::-1]
Run Code Online (Sandbox Code Playgroud)
然后意识到这是“保留未指定的尺寸不变”...的简写,所以
[:,:,:,:, a:b:c] can be written as [..., a:b:c]
Run Code Online (Sandbox Code Playgroud)
和
[a:b:c, :,:,:,:,:] can be written as [a:b:c, ...]
Run Code Online (Sandbox Code Playgroud)
关键词:图像处理、处理、图像、Python、Numpy、翻转、触发器、反向、跨步、开始、结束、范围、切片、切片、提取、缩放、通道、反向、BGR 到 RGB、RGB 到 BGR。